mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 01:10:15 +00:00
92 lines
2.7 KiB
Python
92 lines
2.7 KiB
Python
# Базовые действия с таблицами
|
|
|
|
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 = 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 = f"DROP TABLE IF EXISTS {self.table_name()} CASCADE"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql)
|
|
self.dbconn.conn.commit()
|
|
return
|
|
|
|
def insert_one(self, vals):
|
|
for i in range(0, len(vals)):
|
|
if type(vals[i]) == str:
|
|
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) + ")"
|
|
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 insert_one(self, vals):
|
|
sql = f"INSERT INTO {self.table_name()}("+", ".join(self.column_names_without_id())+") VALUES(" + "%s" + ", %s"*(len(vals)-1) + ")"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql, vals)
|
|
self.dbconn.conn.commit()
|
|
return |