
- •Домашнее задание
- •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.9. Функция создания привязки параметра к изделию
функция: create_prod_param - функция создания привязки параметра к изделию
-- вход:
-- 1. new_prod_id - id изделия
-- 2. new_param_id - id параметра
-- 3. new_int_val - (опционально) - значение целого типа
-- 4. new_str_val - (опционально) - значение строкового типа
-- 5. new_real_val - (опционально) - значение вещественного типа
-- 6. new_enum_id - id перечисления
-- выход: нет
-- эффекты:
-- 1. добавление новой привязки параметра к изделию
-- требования:
-- 1. id изделия должно существовать
-- 2. id параметра должно существовать
-- 3. id перечисления должно существовать
def create_prod_param(new_prod_id, new_param_id, new_int_val, new_str_val, new_real_val, new_enum_id):
try:
# проверка на существование new_prod_id
cursor.execute("SELECT product_name FROM product WHERE id = ?", (new_prod_id,))
is_new_product_name_exist = cursor.fetchone()
print(f'new_prod_id - {new_prod_id}')
print(f'is_new_product_name_exist - {is_new_product_name_exist}')
if is_new_product_name_exist is None:
print(f'Ошибка в create_prod_param: изделия с id {new_prod_id} не найдено')
return 0
# проверка на существование new_param_id
cursor.execute('''
SELECT param_name FROM param WHERE id = ?
''', (new_param_id,))
is_new_param_name_exist = cursor.fetchone()
if is_new_param_name_exist is None:
print(f'Ошибка в create_prod_param: параметра с id {new_param_id} не найдено')
return 0
# проверка на существование new_enum_val
cursor.execute('''
SELECT enum_name FROM enum WHERE id = ?
''', (new_enum_id,))
is_new_enum_id_exist = cursor.fetchone()
if is_new_enum_id_exist is None:
print(f'Ошибка в create_prod_param: перечисления с id {new_enum_id} не найдено')
return 0
if new_int_val:
cursor.execute('''SELECT min_val, max_val FROM param WHERE id = ?''', (new_param_id,))
limits = cursor.fetchall()[0]
print(f'у new_int_val limits = {limits}')
if not limits:
min_val, max_val = None
else:
min_val, max_val = limits
if not ((min_val <= new_int_val) and (new_int_val <= max_val)):
print(f'значение {new_int_val} не попадает в промежуток границ параметра [{min_val} ; {max_val}]')
if new_real_val:
cursor.execute('''SELECT min_val, max_val FROM param WHERE id = ?''', (new_param_id,))
limits = cursor.fetchall()[0]
print(f'у new_real_val limits = {limits}')
if not limits:
min_val, max_val = None
else:
min_val, max_val = limits
if not ((min_val <= new_real_val) and (new_real_val <= max_val)):
print(f'значение {new_real_val} не попадает в промежуток границ параметра [{min_val} ; {max_val}]')
# Выполнение запроса на вставку данных
cursor.execute('''
INSERT INTO prod_param (prod_id, param_id, int_value, str_value, real_value, enum_id)
VALUES (?, ?, ?, ?, ?, ?)
''', (new_prod_id, new_param_id, new_int_val, new_str_val, new_real_val, new_enum_id,))
# Получение количества вставленных строк
res = cursor.rowcount
# Фиксация изменений
conn.commit()
# Возвращение результата
if res == 1:
print(f'Добавлена запись в таблицу prod_param')
return 1
else:
return 0
except sqlite3.Error as e:
print(f"Ошибка в create_prod_param: {e}")
conn.rollback()
return 0