mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 01:10:15 +00:00
116 lines
4.6 KiB
Python
116 lines
4.6 KiB
Python
# Таблица с категориями и действия с ними
|
|
|
|
from dbtable import *
|
|
import math
|
|
|
|
ROW_PER_PAGE = 10
|
|
|
|
class CathTable(DbTable):
|
|
def table_name(self):
|
|
return self.dbconn.prefix + "cath"
|
|
|
|
def columns(self):
|
|
return {"id": ["serial", "PRIMARY KEY"],
|
|
"cath_name": ["varchar(32)", "NOT NULL"]}
|
|
|
|
def table_constraints(self):
|
|
return ['CONSTRAINT "Name" UNIQUE (cath_name)']
|
|
|
|
def delete(self, id):
|
|
param_sql = f"DELETE FROM cath WHERE id = {id};"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(param_sql)
|
|
self.dbconn.conn.commit()
|
|
|
|
def find_by_name(self, name):
|
|
cur = self.dbconn.conn.cursor()
|
|
param_query = "SELECT id FROM cath WHERE cath_name = %s;"
|
|
# sql_sel = "SELECT id FROM " + self.table_name()
|
|
# sql_sel += " WHERE cath_name = " + "'" + name + "'" + ";"
|
|
cur.execute(param_query, (name,))
|
|
ret = list(cur.fetchone())[0]
|
|
return ret
|
|
|
|
def cath_update(self, old):
|
|
"""Функция для обновления категории
|
|
"""
|
|
print(f'''Выбрана категория для изменения: {old}''')
|
|
cur = self.dbconn.conn.cursor()
|
|
|
|
data = input("Введите название (enter - отмена): ").strip()
|
|
while((len(data.strip()) == 0)or(len(data.strip()) > 32)or(self.check_by_name(data.strip()))):
|
|
if (len(data.strip()) > 32):
|
|
data = input("Название слишком длинное! Введите название заново (enter - отмена):").strip()
|
|
elif(self.check_by_name(data.strip()) == 1):
|
|
data = input("Такое название уже существует. Введите новое (enter - отмена):").strip()
|
|
else:
|
|
return "1"
|
|
|
|
param_sql = f"UPDATE cath SET cath_name = '{data}' WHERE cath_name = '{old}';"
|
|
cur.execute(param_sql)
|
|
self.dbconn.conn.commit()
|
|
|
|
def check_by_name(self, value):
|
|
sql = f"SELECT * FROM {self.table_name()} WHERE cath_name='{value}'"
|
|
cur = self.dbconn.conn.cursor()
|
|
cur.execute(sql)
|
|
result = cur.fetchone()
|
|
cur.close()
|
|
if result:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def get_cath_page(self, page_num):
|
|
"""Функция для получения "страницы" из БД по её номеру.
|
|
В программе заменяет .all() для вывода информации.
|
|
|
|
Args:
|
|
page_num (int): номер страницы, определяется пользователем.
|
|
|
|
Returns:
|
|
lst (list): Список, содержащий в себе все строки для этой страницы.
|
|
"""
|
|
final_list = []
|
|
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)
|
|
zero_list = cur.fetchall()
|
|
for i in range(len(zero_list)):
|
|
final_list.append([str(i+1+(ROW_PER_PAGE*(page_num-1))), str(zero_list[i][0]), zero_list[i][1]])
|
|
return final_list
|
|
|
|
def get_cath_from_page(self, row_num):
|
|
arr = self.get_cath_page(math.ceil(row_num/ROW_PER_PAGE))
|
|
row = dict()
|
|
for i in arr:
|
|
if(int(i[0]) == row_num):
|
|
row["id"] = str(i[2])
|
|
row["cath_name"] = str(i[1])
|
|
return row
|
|
# def change_pages(self, )
|
|
|
|
|
|
def example_insert(self):
|
|
# self.insert_one(["Завтрак"])
|
|
# self.insert_one(["Обед"])
|
|
# self.insert_one(["Ужин"])
|
|
# self.insert_one(["Перекус"])
|
|
# self.insert_one(["Десерт"])
|
|
# self.insert_one(["Напиток"])
|
|
# self.insert_one(["Закуска"])
|
|
# self.insert_one(["Салат"])
|
|
# self.insert_one(["Гарнир"])
|
|
# self.insert_one(["Выпечка"])
|
|
# self.insert_one(["Супы"])
|
|
# self.insert_one(["Соусы"])
|
|
# self.insert_one(["Паста"])
|
|
# self.insert_one(["Мясные блюда"])
|
|
# self.insert_one(["Рыбные блюда"])
|
|
# self.insert_one(["Веганские блюда"])
|
|
# self.insert_one(["Блюда из птицы"])
|
|
# self.insert_one(["Морепродукты"])
|
|
# self.insert_one(["Национальная кухня"])
|
|
# self.insert_one(["Быстрые блюда"])
|
|
return |