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

2.2.6. Функция удаления класса параметра

функция: delete_class_param - функция удаления класса параметра

-- вход:

-- 1. class_to_delete - имя класса к удалению

-- выход: нет

-- эффекты:

-- 1. удаление класса параметра

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

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

def delete_class_param(class_to_delete):

try:

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', (class_to_delete,))

exists = cursor.fetchone()

if not exists:

print(f'Ошибка в delete_class_param: Класса параметра с таким названием не существует')

return 0

if (class_to_delete == 'неопределенный параметр класса' or class_to_delete == 'параметр класса'):

print(f"Нельзя удалить параметр класса \'неопределенный параметр класса\' или \'параметр класса\'")

return 0

# Проверка на наличие дочерних элементов

is_children_exist = get_category_children(class_to_delete)

print(f'is_children_exist - {is_children_exist}')

if not is_children_exist:

cursor.execute("DELETE FROM class_param WHERE param_class_name = ?", (class_to_delete,))

conn.commit()

cursor.execute("DELETE FROM terminal_classifier WHERE terminal_classifier_name = ?", (class_to_delete,))

conn.commit()

else:

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', (class_to_delete,))

id_class_to_delete = cursor.fetchone()[0]

print(f'class_to_delete - {class_to_delete}')

print(f'id_class_to_delete - {id_class_to_delete}')

cursor.execute("SELECT id FROM class_param WHERE class_param_id = ? ", (id_class_to_delete,))

children = cursor.fetchall()

print(f'children (id) - {children}')

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', ('неопределенный параметр класса',))

undef_class_id = cursor.fetchone()[0]

children_info_rows = []

for child in children:

print(f'child - {child}')

cursor.execute('''SELECT param_class_name FROM class_param WHERE id = ? ''', (child[0],))

child_name = cursor.fetchone()[0]

print(f'child_name - {child_name}')

cursor.execute('''SELECT * FROM class_param WHERE id = ?''', (child[0],))

child_row = cursor.fetchone()[0]

children_info_rows.append(child_row)

cursor.execute("UPDATE class_param SET class_param_id = ? WHERE id = ?", (undef_class_id, child[0]))

change_parent_of_terminal_classifier(child_name, 'неопределенный параметр класса')

conn.commit()

cursor.execute("DELETE FROM class_param WHERE param_class_name = ?", (class_to_delete,))

conn.commit()

cursor.execute("DELETE FROM terminal_classifier WHERE terminal_classifier_name = ?", (class_to_delete,))

conn.commit()

print(f'children_info_rows - {children_info_rows}')

conn.commit()

print("Удаление завершено успешно")

return 1

except sqlite3.IntegrityError as e:

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

conn.rollback()

return 0

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