
- •Домашнее задание
- •1.2. Содержание работы
- •1.3. Исходные данные для задачи
- •1.4. Рекомендуемые инструменты
- •1.5. Рекомендуемые источники
- •Аннотация
- •Описание выполненной работы
- •1.1 Анализ исходных данных
- •1.2. Разработка функциональных требований к подсистеме
- •1.3. Разработка модели классов
- •2.1.3. Код создания таблицы "enum"
- •2.1.4. Код создания таблицы "product"
- •2.1.5. Код создания таблицы "param"
- •2.1.6. Код создания таблицы "class_param"
- •2.1.7. Код создания таблицы "prod_param"
- •2.2. Реализация основных функций
- •2.2.1. Функция создания параметра
- •2.2.2. Функция редактирования параметра
- •2.2.3. Функция удаления параметра
- •2.2.4. Функция создания класса параметра
- •2.2.5. Функция изменения класса параметра
- •2.2.6. Функция удаления класса параметра
- •2.2.7. Функция наследования класса параметра
- •2.2.8. Функция изменения приоритета вывода класса параметра
- •2.2.9. Функция создания привязки параметра к изделию
- •2.2.10. Функция изменения привязки параметра и изделия
- •2.2.11. Функция нахождения id параметров у изделия
- •2.2.12. Функция поиска изделий заданного класса параметра
- •2.2.13. Функция поиска изделия с заданным параметром в заданном интервале
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 []