Files
2024-05-23 17:54:39 +03:00

104 lines
3.1 KiB
Python

# Базовые действия с таблицами
import re
from dbconnection import *
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 = list(self.columns().keys())
for key in self.primary_key():
if key in res:
res.remove(key)
return res
def table_constraints(self):
return []
def create(self):
sql = "CREATE TABLE " + self.table_name() + "("
arr = [k + " " + " ".join(v) for k, v in self.columns().items()]
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 delete_one(self, data):
if type(data)==int:
sql = f"DELETE FROM {self.table_name()} WHERE id = %(id)s"
cur = self.dbconn.conn.cursor()
cur.execute(sql, {'id': str(data)})
self.dbconn.conn.commit()
elif type(data)==str:
sql = f"DELETE FROM {self.table_name()} WHERE name = %(name)s"
cur = self.dbconn.conn.cursor()
cur.execute(sql, {'name': str(data)})
self.dbconn.conn.commit()
return
def insert_one(self, vals):
for i in range(0, len(vals)):
if type(vals[i]) == str:
vals[i] = re.split(r"'|--|\(|\)", vals[i])[0]
vals[i] = "'" + vals[i] + "'"
else:
vals[i] = str(vals[i])
# sql = "INSERT INTO " + self.table_name() + "("
# sql += ", ".join(self.column_names_without_id()) + ") VALUES("
# sql += ", ".join(vals) + ")"
sql = f"""INSERT INTO {self.table_name()} ({", ".join(self.column_names_without_id())}) VALUES ({", ".join(vals)});"""
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()