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

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

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

-- вход:

-- 1. new_class_to_inherit__name - имя нового класса

-- 2. new_class_to_inherit__short_name - короткое имя нового класса

-- 3. parent_class__name - имя класса, от которого будет идти наследование

-- выход: нет

-- эффекты:

-- 1. добавление нового наследованного класса

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

-- 1. класс, от которого происходит наследование должен существовать

def inherit_class_parameters(new_class_to_inherit__name, new_class_to_inherit__short_name, parent_class__name):

try:

# Получаем parent_id

cursor.execute('''

SELECT id FROM class_param WHERE param_class_name = ?

''', (parent_class__name,))

parent_id_row = cursor.fetchone()

if parent_id_row is None:

print(f'Ошибка в inherit_class_parameters: класса параметра с именем для наследования не найдено')

return 0 # Если id родителя в таблице class_param не найдено

# Получаем параметры из CLASS_PARAM для parent_id

cursor.execute('''

SELECT class_param_id, param_id FROM class_param WHERE param_class_name = ? ORDER BY priority

''', (parent_class__name,))

param_rows = cursor.fetchall()

print(f'param_rows - {param_rows}')

for param_row in param_rows:

class_param_id, param_id = param_row

# Проверяем, существует ли уже параметр для данного cl_id

cursor.execute('''

SELECT 1 FROM class_param WHERE param_class_name = ? AND param_id = ?

''', (new_class_to_inherit__name, param_id))

exists = cursor.fetchone()

cursor.execute('''

SELECT param_name FROM param WHERE id = ?''', (param_id,))

param_name = cursor.fetchone()[0]

print(f'exists ? - {exists}')

if exists:

print(f'Класс параметра с именем {new_class_to_inherit__name} уже существует.')

if not exists:

create_class_param(new_class_to_inherit__name, new_class_to_inherit__short_name, param_name, parent_class__name)

conn.commit()

except sqlite3.Error as e:

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

conn.rollback()

return 0

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

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

-- вход:

-- 1. class_id

-- 2. id

-- 3. priority

-- выход: нет

-- эффекты:

-- 1. изменение приоритета вывода класса параметра

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

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

def edit_class_param_output_priority(class_id, id, priority):

try:

# Выполнение запроса для получения количества записей с указанным priority и id класса

cursor.execute("""

SELECT count(*)

FROM class_param

WHERE priority = ? AND class_param_id = ?

""", (priority, class_id))

# Получение результата запроса

cnt = cursor.fetchone()[0]

if cnt == 0:

# Если таких записей нет, обновляем priority для указанной записи

cursor.execute("""

UPDATE class_param

SET priority = ?

WHERE class_param_id = ? AND id = ?

""", (priority, class_id, id))

else:

# Если такие записи есть, увеличиваем output_priority для всех записей с priority >= переданного в функцию priority

cursor.execute("""

UPDATE class_param

SET priority = priority + 1

WHERE priority >= ? AND class_param_id = ?

""", (priority, class_id))

# Затем обновляем priority для указанной записи

cursor.execute("""

UPDATE class_param

SET priority = ?

WHERE class_param_id = ? AND id = ?

""", (priority, class_id, id))

conn.commit()

print(f'Приоритет изменен.')

return priority

except sqlite3.Error as e:

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

conn.rollback()

return 0

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