Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 4 / мисприс-2.4_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
4
Добавлен:
29.03.2025
Размер:
698.87 Кб
Скачать

Процедура, создающая запись в таблице «func»:

def create_func(new_name: str, new_class_id: int) -> int:

try:

# Проверка на существование записи с таким именем

cursor.execute("SELECT COUNT(*) FROM func WHERE name = ?", (new_name,))

is_already_exist = cursor.fetchone()

print(f'is_already_exist - {is_already_exist}')

if is_already_exist and is_already_exist[0] != 0:

raise ValueError(f'Функция с именем \"{new_name}\" уже существует в таблице func')

# Проверка, существует ли class_id в таблице terminal_classifier

cursor.execute("SELECT COUNT(*) FROM terminal_classifier WHERE id = ?", (new_class_id,))

if cursor.fetchone()[0] == 0:

raise ValueError(f'Класса с id={new_class_id} не существует в таблице terminal_classifier')

# Вставка новой записи

cursor.execute(

"INSERT INTO func(name, class_id) VALUES (?, ?)",

(new_name, new_class_id)

)

conn.commit()

# Получение id последней вставленной записи

cursor.execute("SELECT last_insert_rowid();")

new_id = cursor.fetchone()[0]

print(f'создана новая функция с именем=\"{new_name}\" для класса с id=\"{new_class_id}\"')

return new_id

except (sqlite3.Error, ValueError) as e:

print(f'Ошибка при создании функции в create_func: {e}')

Процедура, создающая запись в таблице «prod_spec»:

def create_obj_spec(new_obj_id: int, new_func_id: int) -> int:

try:

cursor.execute("SELECT COUNT(*) FROM prod_spec WHERE prod_id = ? AND func_id = ?", (new_obj_id, new_func_id))

is_already_exist = cursor.fetchone()

if is_already_exist:

is_already_exist = is_already_exist[0]

if is_already_exist:

raise ValueError(f'ошибка! запись с prod_id={new_obj_id} и func_id={new_func_id} уже существует в таблице prod_spec')

cursor.execute("SELECT configurable_type FROM product WHERE id = ?;", (new_obj_id,))

result = cursor.fetchone()

if not result or result[0] != 1:

raise ValueError(f"Object with id {new_obj_id} is not a configurable type.")

cursor.execute("INSERT INTO prod_spec (prod_id, func_id) VALUES (?, ?)", (new_obj_id, new_func_id))

conn.commit()

print(f'в таблицу prod_spec успешно добавлена новая запись с prod_id={new_obj_id} и func_id={new_func_id}')

return cursor.rowcount

except (sqlite3.Error, ValueError) as e:

print(f'Ошибка при создании спецификации объекта в create_obj_spec: {e}')

conn.rollback()

return 0

Процедура, создающая запись в таблице «predicate»:

def create_predicate(new_op_id: int, new_param_id: int, new_enum_pos_id: int) -> int:

try:

cursor.execute('SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?', (ENUM_OPERATORS_CLASS_NAME,))

op_enum_class_id = cursor.fetchone()

if op_enum_class_id:

op_enum_class_id = op_enum_class_id[0]

else:

raise ValueError(f'не найдено id класса перечисления \"{ENUM_OPERATORS_CLASS_NAME}\". проверьте существование класса перечисления \"{ENUM_OPERATORS_CLASS_NAME}\" ')

cursor.execute('SELECT COUNT(*) from predicate WHERE operator_id=? AND param_id=? AND enum_pos_id=?', (new_op_id, new_param_id, new_enum_pos_id,))

is_already_exist = cursor.fetchone()

if is_already_exist:

is_already_exist = is_already_exist[0]

if is_already_exist:

raise ValueError(f'ошибка! запись в таблице predicate с такими параметрами: \nid=\"{new_op_id}\", param_id=\"{new_param_id}\", enum_pos_id=\"{new_enum_pos_id}\" уже существует.')

# enum_id - класс_id перечисления (плохой нейминг, но лень фиксить)

cursor.execute("SELECT enum_id FROM enum WHERE id = ?;", (new_op_id,))

if cursor.fetchone()[0] != op_enum_class_id:

raise ValueError(f"Оператор не принадлежит перечислению операторов {op_enum_class_id}.")

cursor.execute(

"INSERT INTO predicate(operator_id, param_id, enum_pos_id) VALUES (?, ?, ?)",

(new_op_id, new_param_id, new_enum_pos_id)

)

conn.commit()

cursor.execute("SELECT last_insert_rowid();")

new_id = cursor.fetchone()[0]

print(f'создан новый предикат с id=\"{new_op_id}\", param_id=\"{new_param_id}\", enum_pos_id=\"{new_enum_pos_id}\"')

return new_id

except (sqlite3.Error, ValueError) as e:

print(f'Ошибка при создании предиката в create_predicate: {e}')

Соседние файлы в папке 4