
- •Задание на работу
- •Аннотация
- •Описание выполненной работы
- •1.1 Анализ исходных данных
- •2. Создание базы данных
- •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. Добавление класса перечисления
- •2.2.12. Изменение приоритета конкретного перечисления
- •2.2.13. Проверка классов перечисления на цикл
- •2.2.14. Изменение родителя класса перечисления
- •3. Тестирование
2.2.9. Изменение приоритета вывода записей находящихся на одном уровне
функция: edit_enum_pos_priority() - изменение приоритета вывода записей находящихся на одном уровне
-- вход:
-- 1. enum_pos_id - id изменяемого перечисления
-- 2. new_priority - новый приоритет
-- выход: нет
-- эффекты:
-- 1. изменение приоритета вывода перечисления одного уровня
-- требования:
-- 1. перечисления должны существовать
def edit_enum_pos_priority(enum_pos_id, new_priority):
try:
# Получаем enum_id для указанного enum_pos_id
cursor.execute("SELECT enum_id FROM enum WHERE id = ?", (enum_pos_id,))
result = cursor.fetchone()
if result is None:
print('Указанное enum_pos_id не найдено.')
return None
enum_id = result[0]
# Проверяем, существует ли уже запись с таким priority для данного enum_id
cursor.execute("""
SELECT count(*)
FROM enum
WHERE priority = ?
AND enum_id = ?
""", (new_priority, enum_id))
count = cursor.fetchone()[0]
if count == 0:
# Обновляем priority
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
else:
# Смещаем приоритеты и обновляем нужную запись
cursor.execute("""
UPDATE enum
SET priority = priority + 1
WHERE priority >= ?
AND enum_id = ?
""", (new_priority, enum_id))
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
conn.commit()
return new_priority
except Exception as _ex:
print(f"Произошла ошибка при изменении приоритета перечисления: {_ex}")
2.2.10. Поиск списка перечислений заданного класса и его вывод
функция: find_enums() - поиск списка перечислений заданного класса
-- вход:
-- 1. enum_class_id - id класса перечисления
-- выход: список перечислений со всеми полями
-- эффекты: нет
-- требования:
-- 1. класс перечисления должен существовать
def find_enums(enum_class_id):
try:
cursor.execute("""
SELECT ep.id, ep.enum_name, ep.enum_short_name, ep.enum_id, ep.priority, ep.real_value, ep.int_value, ep.pic_value, ep.id_unit
FROM enum ep
WHERE ep.enum_id = ?
ORDER BY ep.priority ASC
""", (enum_class_id,))
results = cursor.fetchall()
for row in results:
print(row)
return results
except Exception as _ex:
print(f"Произошла ошибка при получении списка перечислений заданного класса: {_ex}")
2.2.11. Добавление класса перечисления
функция: add_enum_in_classifier() - добавление класса перечисления
-- вход:
-- 1. enum_classifier_name - имя класса
-- 2. enum_classifier_short_name - короткое имя класса
-- 3. enum_parent_name - (optional) родительское имя
-- выход: нет
-- эффекты:
-- 1. добавления класса перечисления
-- требования:
-- 1. если есть enum_parent_name, класс с этим именем должен существовать
def add_enum_in_classifier(enum_classifier_name, enum_classifier_short_name, enum_parent_name):
try:
cursor.execute("SELECT id FROM enum_classifier WHERE enum_classifier_name = ?", (enum_parent_name,))
id_parent_check = cursor.fetchone()
if id_parent_check is not None:
id_parent = id_parent_check[0]
cursor.execute('''
INSERT INTO enum_classifier (enum_classifier_name, enum_classifier_short_name, id_parent)
VALUES (?, ?, ?)
''', (enum_classifier_name, enum_classifier_short_name, id_parent))
conn.commit()
else:
cursor.execute('''
INSERT INTO enum_classifier (enum_classifier_name, enum_classifier_short_name, id_parent)
VALUES (?, ?, NULL)
''', (enum_classifier_name, enum_classifier_short_name))
conn.commit()
print('Перечисление успешно добавлено в основную базу.')
except Exception as _ex:
print(f'Error {_ex} - ошибка при добавлении enum_in_classifier.')