mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 09:20:15 +00:00
102 lines
4.1 KiB
Python
102 lines
4.1 KiB
Python
# Таблица с блюдами и действия с ними
|
|
|
|
from dbtable import *
|
|
import add_func
|
|
|
|
class DishTable(DbTable):
|
|
def table_name(self):
|
|
return self.dbconn.prefix + "dish"
|
|
|
|
def columns(self):
|
|
return {"id": ["serial", "PRIMARY KEY"],
|
|
"cath_id": ["integer", "REFERENCES cath(id) ON DELETE CASCADE", "NOT NULL"],
|
|
"dish_name": ["varchar(32)", "NOT NULL"],
|
|
"cook_time": ["interval"],
|
|
"manual": ["text"]}
|
|
|
|
def table_constraints(self):
|
|
return ['CONSTRAINT "Name Dish" UNIQUE (dish_name)']
|
|
|
|
|
|
|
|
def find_by_position(self, num):
|
|
sql = "SELECT * FROM " + self.table_name()
|
|
sql += " ORDER BY "
|
|
sql += ", ".join(self.primary_key())
|
|
sql += " LIMIT 1 OFFSET %(offset)s"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql, {"offset": num - 1})
|
|
return cur.fetchone()
|
|
|
|
def all_by_cath_id(self, cath_id):
|
|
sql = "SELECT * FROM " + self.table_name()
|
|
sql += " WHERE cath_id = " + str(cath_id)
|
|
sql += " ORDER BY "
|
|
sql += ", ".join(self.primary_key())
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql)
|
|
return cur.fetchall()
|
|
|
|
def delete(self, val):
|
|
sql = "DELETE FROM dish"
|
|
sql += " WHERE dish_name"
|
|
sql += "=" + "'" + val + "';"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql)
|
|
self.dbconn.conn.commit()
|
|
|
|
def check_by_name(self, value):
|
|
sql = f"SELECT * FROM {self.table_name()} WHERE dish_name='{value}'"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql)
|
|
result = cur.fetchone()
|
|
cur.close()
|
|
if result:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def insert_dishone(self, cath_id):
|
|
|
|
ins_name = input('Введите название добавляемого блюда (1 - для отмены): ')
|
|
|
|
while (ins_name.strip() == '')or(len(ins_name.strip()) > 32)\
|
|
or(add_func.is_cyr_or_dig(ins_name.strip())==0)or(DishTable().check_by_name(ins_name)):
|
|
|
|
if(ins_name.strip() == ''):
|
|
ins_name = input("Пустая строка. Повторите ввод! Укажите название удаляемого блюда (0 - отмена): ")
|
|
if ins_name == "0":
|
|
return "1"
|
|
|
|
elif(len(ins_name.strip()) > 32):
|
|
ins_name = input("Слишком длинная строка. Повторите ввод!\
|
|
Укажите название удаляемого блюда (0 - отмена): ")
|
|
if ins_name == "0":
|
|
return "1"
|
|
|
|
elif(add_func.is_cyr_or_dig(ins_name.strip())==0):
|
|
ins_name = input("Название должно состоять только из символов кириллицы. Повторите ввод!\
|
|
Укажите название удаляемого блюда (0 - отмена): ")
|
|
if ins_name == "0":
|
|
return "1"
|
|
|
|
else:
|
|
print('Такое блюдо уже существует')
|
|
ins_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ")
|
|
if ins_name == "0":
|
|
return "1"
|
|
|
|
ins_time = input(f'Процесс добавления блюда: {ins_name}\
|
|
\nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
|
if ins_time == "0":
|
|
return "1"
|
|
ins_manual = input(f'Процесс добавления блюда: {ins_name}\
|
|
\nВведите краткую инструкцию приготовления блюда (1 - для отмены): ')
|
|
if ins_time == "0":
|
|
return "1"
|
|
|
|
insert = [cath_id, ins_time, ins_name, ins_manual]
|
|
DishTable().insert_one(insert)
|
|
|
|
|
|
|