create 0.8.1

This commit is contained in:
ada-dmitry
2024-05-16 11:00:48 +03:00
parent 7adca1884d
commit 702a3ca3f9
19 changed files with 1015 additions and 6 deletions
+141
View File
@@ -0,0 +1,141 @@
# Базовые действия с таблицами
from dbconnection import *
'''
FIXME:
'''
class DbTable:
dbconn = None
def __init__(self):
return
def table_name(self):
return self.dbconn.prefix + "table"
def columns(self):
return {"test": ["integer", "PRIMARY KEY"]}
def column_names(self):
return sorted(self.columns().keys(), key = lambda x: x)
def primary_key(self):
return ['id']
def column_names_without_id(self):
res = sorted(self.columns().keys(), key = lambda x: x)
if 'id' in res:
res.remove('id')
return res
def table_constraints(self):
return []
def create(self):
sql = "CREATE TABLE " + self.table_name() + "("
arr = [k + " " + " ".join(v) for k, v in sorted(self.columns().items(), key = lambda x: x[0])]
sql += ", ".join(arr + self.table_constraints())
sql += ")"
cur = self.dbconn.conn.cursor()
cur.execute(sql)
self.dbconn.conn.commit()
return
def drop(self):
sql = "DROP TABLE IF EXISTS " + self.table_name()
cur = self.dbconn.conn.cursor()
cur.execute(sql)
self.dbconn.conn.commit()
return
def insert_one(self, vals):
for i in range(len(vals)):
if type(vals[i]) == str:
vals[i] = "'" + vals[i] + "'"
else:
vals[i] = str(vals[i])
values = ", ".join(vals)
query = f"""INSERT INTO {self.table_name()}({", ".join(self.column_names_without_id())}) VALUES({values})"""
cur = self.dbconn.conn.cursor()
# cur.execute(sql)
try:
cur.execute(query)
self.dbconn.conn.commit()
except psycopg2.errors.UniqueViolation:
self.dbconn.conn.rollback()
return
def update(self, column, values, wh):
sql = f"UPDATE {self.table_name()} SET {column} = {values} WHERE id = {wh};"
cur = self.dbconn.conn.cursor()
cur.execute(sql)
self.dbconn.conn.commit()
return
def first(self):
sql = "SELECT * FROM " + self.table_name()
sql += " ORDER BY "
sql += ", ".join(self.primary_key())
cur = self.dbconn.conn.cursor()
cur.execute(sql)
return cur.fetchone()
def last(self):
sql = "SELECT * FROM " + self.table_name()
sql += " ORDER BY "
sql += ", ".join([x + " DESC" for x in self.primary_key()])
cur = self.dbconn.conn.cursor()
cur.execute(sql)
return cur.fetchone()
def all(self):
sql = "SELECT * FROM " + self.table_name()
sql += " ORDER BY "
sql += ", ".join(self.primary_key())
cur = self.dbconn.conn.cursor()
cur.execute(sql)
return cur.fetchall()
def get_page(self, page_num):
"""Функция для получения "страницы" из БД по её номеру.
В программе заменяет .all() для вывода информации.
Args:
page_num (int): номер страницы, определяется пользователем.
Returns:
lst (list): Список, содержащий в себе все строки для этой страницы.
"""
ROW_PER_PAGE = 10
cur = self.dbconn.conn.cursor()
offset = (page_num - 1) * ROW_PER_PAGE
sql = (f"SELECT * FROM {self.table_name()} LIMIT {ROW_PER_PAGE} OFFSET {offset}")
cur.execute(sql)
return cur.fetchall()
def select_one(self, **kwargs):
conditions = []
values = []
sorted_kwargs = sorted(kwargs.items(), key=lambda x: x[0])
for key, value in sorted_kwargs():
conditions.append(f"{key}=%s")
values.append(value)
sql = f"SELECT * FROM {self.table_name()} WHERE " + " AND ".join(conditions)
cur = self.dbconn.conn.cursor()
cur.execute(sql, tuple(values))
result = cur.fetchone()
cur.close()
if result:
return True
else:
return False