mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 17:30:17 +00:00
62 lines
2.7 KiB
Python
62 lines
2.7 KiB
Python
# Таблица Телефоны и особые действия с ней.
|
||
|
||
from dbtable import *
|
||
|
||
class RacersTable(DbTable):
|
||
def table_name(self):
|
||
return self.dbconn.prefix + '"Racers"'
|
||
|
||
def columns(self):
|
||
return {"racer_id": ["serial", "PRIMARY KEY"],
|
||
"surname": ["varchar(64)", "NOT NULL"],
|
||
"name": ["varchar(64)", "NOT NULL"],
|
||
"birthday": ["date", "NOT NULL", "CHECK (extract(year from age(current_date, birthday)) < 60)"],
|
||
"country_id": ["integer", "NOT NULL", 'REFERENCES public."Сountries"(country_id) ON DELETE CASCADE'],
|
||
"wins": ["integer", "NOT NULL", "DEFAULT 0"]}
|
||
def table_constraints(self):
|
||
return ["UNIQUE (surname, name, birthday)"]
|
||
def primary_key(self):
|
||
return ["racer_id"]
|
||
def column_names_without_id(self):
|
||
res = sorted(self.columns().keys(), key = lambda x: x)
|
||
res.remove('racer_id')
|
||
return res
|
||
def all_by_country_id(self, cid):
|
||
sql = f"SELECT * FROM {self.table_name()} WHERE country_id = " + "%s ORDER BY surname, name, birthday"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, (cid,))
|
||
return cur.fetchall()
|
||
def delete_by_cid(self, cid):
|
||
sql = f"DELETE FROM {self.table_name()} WHERE country_id = " +"%s"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, (cid,))
|
||
self.dbconn.conn.commit()
|
||
return
|
||
def find_by_position(self, cid, num):
|
||
sql = f"SELECT * FROM {self.table_name()} WHERE "+ "country_id = %(cid)s ORDER BY surname, name, birthday LIMIT 1 OFFSET %(offset)s"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, {"cid": cid, "offset": num - 1})
|
||
return cur.fetchone()
|
||
def delete_by_rid(self, rid):
|
||
sql = f"DELETE FROM {self.table_name()} WHERE racer_id = " +"%s"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, (rid,))
|
||
self.dbconn.conn.commit()
|
||
return
|
||
def checkbirthday(self, val):
|
||
sql = "SELECT extract(year from age(current_date, %s)) >= 60"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, (val,))
|
||
return cur.fetchone()
|
||
def select_by_s_n_b(self, vals):
|
||
sql = f"SELECT racer_id FROM {self.table_name()} WHERE name = " + "%s AND surname = %s AND birthday = %s"
|
||
cur = self.dbconn.conn.cursor()
|
||
cur.execute(sql, vals)
|
||
return cur.fetchone()
|
||
def insertbydef(self, vals):
|
||
sql = f"INSERT INTO {self.table_name()}(birthday, country_id, name, surname) VALUES "+"(%s,%s,%s,%s)"
|
||
cur = self.dbconn.conn.cursor()
|
||
print(vals)
|
||
cur.execute(sql, vals)
|
||
self.dbconn.conn.commit()
|
||
return |