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

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

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