Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 сем / 3 / МиСПрИС_1374_3_Наволоцкий_Харитонов_Зырянов.docx
Скачиваний:
6
Добавлен:
29.03.2025
Размер:
2.61 Mб
Скачать

2.2.10. Функция изменения привязки параметра и изделия

функция: edit_prod_param - функция изменения привязки параметра и изделия

-- вход:

-- 1. id - id записи

-- 2. new_int_val - новое целочисленное значение (опционально. при неуказании записывается NULL)

-- 3. new_str_val - новое строковое значение (опционально. при неуказании записывается NULL)

-- 4. new_real_val - новое вещественное значение (опционально. при неуказании записывается NULL)

-- 5. new_enum_val - новое значение перечисления

-- выход: нет

-- эффекты:

-- 1. изменение привязки параметра и изделия

-- требования:

-- 1. запись должна существовать

-- 2. перечисление должно существовать

def edit_prod_param(id, new_int_val, new_str_val, new_real_val, new_enum_val):

try:

# Начало транзакции

conn.execute('BEGIN TRANSACTION')

new_enum_val

# проверка на существование new_enum_val

cursor.execute('''

SELECT id FROM enum WHERE enum_name = ?

''', (new_enum_val,))

is_enum_exist = cursor.fetchall()

print(f'is_enum_exist - {is_enum_exist}')

if is_enum_exist is None:

print(f'Ошибка в edit_prod_param: записи с new_enum_val {new_enum_val} в enum не найдено')

return 0

else:

new_enum_id = is_enum_exist[0]

# проверка на существование id

cursor.execute('''

SELECT prod_id, param_id FROM prod_param WHERE id = ?

''', (id,))

is_id_exist = cursor.fetchall()

print(f'is_id_exist - {is_id_exist}')

if is_id_exist is None:

print(f'Ошибка в edit_prod_param: записи с id {id} в prod_param не найдено')

return 0

print(f'enum_id - {new_enum_id[0]}')

# Выполнение запроса на обновление данных

cursor.execute('''

UPDATE prod_param

SET int_value = ?, str_value = ?, enum_id = ?, real_value = ?

WHERE id = ?

''', (new_int_val, new_str_val, new_enum_id[0], new_real_val, id))

# Получение количества обновленных строк

res = cursor.rowcount

# Фиксация изменений

conn.commit()

# Возвращение результата

if res == 1:

return 1

else:

return 0

except sqlite3.Error as e:

print(f"Ошибка в edit_prod_param: {e}")

conn.rollback()

return 0

2.2.11. Функция нахождения id параметров у изделия

функция: find_param_id_from_prod - функция нахождения id параметров у изделия

-- вход:

-- 1. prod_id - id изделия

-- выход:

-- 1. список id параметров изделия

-- эффекты: нет

-- требования:

-- 1. изделие должно существовать

def find_param_id_from_prod(prod_id):

try:

cursor.execute('SELECT product_name FROM product WHERE id = ?', (prod_id,))

product_name = cursor.fetchone()

if product_name:

product_name = product_name[0]

else:

print(f'изделия с id - {prod_id} не существует.')

return 0

# Начало транзакции

conn.execute('BEGIN TRANSACTION')

# Получение class_id из таблицы obj

cursor.execute('SELECT id_category FROM product WHERE id = ?', (prod_id,))

id_parent = cursor.fetchone()

print(f'id_parent = {id_parent}')

if id_parent is None:

print(f'Ошибка: объект с id {prod_id} не найден')

return []

id_parent = id_parent[0]

# Получение param_id из таблицы class_param, упорядоченных по output_priority

cursor.execute('''

SELECT param_id FROM class_param

WHERE class_param_id = ?

ORDER BY priority

''', (id_parent,))

param_ids = cursor.fetchall()

# Фиксация изменений

conn.commit()

# Возвращение результата в виде списка

return [row[0] for row in param_ids]

except sqlite3.Error as e:

print(f"Ошибка в find_param_id_from_prod: {e}")

conn.rollback()

return []

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