Скачиваний:
4
Добавлен:
29.03.2025
Размер:
1.25 Mб
Скачать

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

функция: create_prod_position_union - добавление записи в таблицу prod_position_union

-- вход:

-- 1. new_object_id - id объекта для экземпляра продукции

-- 2. new_component_id - id объекта для компонента экземпляра продукции

-- 3. new_quantity - новое количество для компонентов

-- выход: 1 - успех / 0 - ошибка

-- эффекты:

-- 1. создание новой записи в таблице prod_position_union

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

-- 1. передаваемые id объектотв должны существовать

def create_prod_position_union(new_object_id, new_component_id, new_quantity):

try:

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

obj_class_id = cursor.fetchone()

if obj_class_id is None:

raise ValueError("Object ID not found")

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

comp_class_id = cursor.fetchone()

if comp_class_id is None:

raise ValueError("Component ID not found")

cursor.execute('''

SELECT 1

FROM acceptable_components

WHERE class_id = ? AND component_id = ?

''', (obj_class_id[0], comp_class_id[0]))

if cursor.fetchone() is None:

raise ValueError("Invalid composition for the object!")

cursor.execute('''

INSERT INTO prod_position_union (prod_id, comp_id, quantity)

VALUES (?, ?, ?)

''', (new_object_id, new_component_id, new_quantity))

conn.commit()

print('таблица prod_position_union успешно обновлена новым значением.')

return 1 # Success

except Exception as e:

print(f"Error: {e}")

return 0 # Failure

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

функция: delete_prod_position_union - удаление записи из таблицы prod_position_union

-- вход:

-- 1. prod_id - id объекта для экземпляра продукции

-- 2. comp_id - id объекта для компонента экземпляра продукции

-- выход: 1 - успех / 0 - ошибка

-- эффекты:

-- 1. удаление записи в таблице prod_position_union

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

-- 1. передаваемые id объектов должны существовать

def delete_prod_position_union(prod_id, comp_id):

cursor.execute('''

DELETE FROM prod_position_union

WHERE prod_id = ? AND comp_id = ?

''', (prod_id, comp_id))

deleted_rows = cursor.rowcount

conn.commit()

print(f'в таблице prod_position_union успешно удалено значение - {prod_id, comp_id}')

return 1 if deleted_rows == 1 else 0

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

функция: delete_acceptable_component - удаление записи из таблицы acceptable_component

-- вход:

-- 1. cl_id - id класса для экземпляра продукции

-- 2. component_cl_id - id класса для компонента экземпляра продукции

-- выход: 1 - успех / 0 - ошибка

-- эффекты:

-- 1. удаление записи в таблице acceptable_component

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

-- 1. передаваемые id объектов должны существовать

def delete_acceptable_component(cl_id, component_cl_id):

deleted_count = 0

try:

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

obj_ids = [row[0] for row in cursor.fetchall()]

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

comp_ids = [row[0] for row in cursor.fetchall()]

print('obj_ids - ', obj_ids)

print('comp_ids - ', comp_ids)

# Delete all associated position compositions

for obj_id in obj_ids:

for comp_id in comp_ids:

if (is_prod_position_union(obj_id, comp_id)):

deleted_count += delete_prod_position_union(obj_id, comp_id)

# Delete from acceptable_components

cursor.execute('''

DELETE FROM acceptable_components

WHERE class_id = ? AND component_id = ?

''', (cl_id, component_cl_id))

conn.commit()

print(f'успешно удалено {deleted_count} строк из таблицы acceptable_components')

return deleted_count

except Exception as e:

print(f"Error: {e}")

return deleted_count

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