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

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

функция: create_class_param - функция создания нового класса параметра

-- вход:

-- 1. terminal_classifier_name_class - имя класса

-- 2. terminal_classifier_name_short_class - короткое имя класса

-- 3. param_name - имя параметра

-- 4. parent_class_param_name - (опционально) - имя класса родителя

-- выход: нет

-- эффекты:

-- 1. новая запись в таблице class_param

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

-- 1. если указано имя родителя, оно должно существовать

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

def create_class_param(terminal_classifier_name_class, terminal_classifier_name_short_class, param_name, parent_class_param_name):

try:

cursor.execute("SELECT id FROM param WHERE param_name = ?", (param_name,))

param_id = cursor.fetchone()

if not param_id:

print(f'Ошибка в create_class_param: параметра с именем {param_name} не существует в таблице param')

return 0

else:

param_id = param_id[0]

cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (parent_class_param_name,))

parent_class_id = cursor.fetchone()

if not parent_class_id:

print(f'В create_class_param: класса параметра (родителя) с именем {parent_class_param_name} не существует в таблице terminal_classifier, будет вставлено значение None')

parent_class_id = None

else:

parent_class_id = parent_class_id[0]

# Получаем максимальное значение priority для данного class_id

cursor.execute(''' SELECT COUNT(*) FROM class_param WHERE param_class_name = ? ''', (terminal_classifier_name_class,))

res = cursor.fetchone()[0]

if res is None:

res = 0

else:

cursor.execute(''' SELECT MAX(priority) + 1 FROM class_param WHERE param_class_name = ? ''', (terminal_classifier_name_class,))

res = cursor.fetchone()[0]

if res is None:

res = 0

cursor.execute('''SELECT unit_id FROM param WHERE param_name = ? ''', (param_name,))

unit_id = cursor.fetchone()

if not unit_id:

print(f'Единицы измерения с заданным {unit_id} не найдено. Будет вставлено NULL')

else:

unit_id = unit_id[0]

cursor.execute('''

INSERT INTO terminal_classifier(id_parent, terminal_classifier_name, terminal_classifier_short_name, id_unit, priority)

VALUES (?, ?, ?, ?, ?)

''', (parent_class_id, terminal_classifier_name_class, terminal_classifier_name_short_class, unit_id, res))

cursor.execute('''

INSERT INTO class_param(param_class_name, param_class_short_name, class_param_id, param_id, priority)

VALUES (?, ?, ?, ?, ?)

''', (terminal_classifier_name_class, terminal_classifier_name_short_class, parent_class_id, param_id, res))

conn.commit()

except sqlite3.Error as e:

# В случае ошибки откатываем транзакцию

print(f"An error occurred: {e}")

conn.rollback()

return 0

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