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

2.1.3. Код создания таблицы "enum"

def create_enum_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS enum (

id INTEGER PRIMARY KEY AUTOINCREMENT,

enum_id INTEGER,

enum_name TEXT NOT NULL,

enum_short_name TEXT NOT NULL,

enum_description TEXT,

real_value REAL,

int_value INTEGER,

pic_value TEXT,

priority INTEGER NOT NULL DEFAULT 0,

FOREIGN KEY (enum_id) REFERENCES terminal_classifier(id)

)

''')

conn.commit()

2.1.4. Код создания таблицы "product"

def create_product_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS product (

id INTEGER PRIMARY KEY AUTOINCREMENT,

id_category INTEGER,

product_name TEXT NOT NULL,

quantity INTEGER DEFAULT 0,

price REAL DEFAULT 0,

unit_value REAL,

FOREIGN KEY (id_category) REFERENCES terminal_classifier(id)

)

''')

conn.commit()

2.1.5. Код создания таблицы "param"

def create_param_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS param (

id INTEGER PRIMARY KEY AUTOINCREMENT,

param_name TEXT NOT NULL,

param_short_name TEXT NOT NULL,

unit_id INTEGER,

min_val REAL,

max_val REAL,

FOREIGN KEY (unit_id) REFERENCES unit(id)

)

''')

conn.commit()

2.1.6. Код создания таблицы "class_param"

def create_class_param_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS class_param (

id INTEGER PRIMARY KEY AUTOINCREMENT,

param_id INTEGER NOT NULL,

class_param_id INTEGER,

param_class_name TEXT NOT NULL,

param_class_short_name TEXT NOT NULL,

priority INTEGER NOT NULL,

FOREIGN KEY (param_id) REFERENCES param(id),

FOREIGN KEY (class_param_id) REFERENCES terminal_classifier(id) ON DELETE CASCADE

)

''')

conn.commit()

2.1.7. Код создания таблицы "prod_param"

def create_prod_param_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS prod_param (

id INTEGER PRIMARY KEY AUTOINCREMENT,

prod_id INTEGER NOT NULL,

param_id INTEGER NOT NULL,

int_value INTEGER,

str_value TEXT,

real_value REAL,

enum_id INTEGER,

UNIQUE(prod_id, param_id),

FOREIGN KEY (enum_id) REFERENCES enum(id),

FOREIGN KEY (prod_id) REFERENCES product(id),

FOREIGN KEY (param_id) REFERENCES param(id)

)

''')

conn.commit()

2.2. Реализация основных функций

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

функция: create_param - создание параметра

-- вход:

-- 1. new_name - имя параметра

-- 2. new_short_name - короткое имя параметра

-- 3. new_unit_id - имя единицы измерения

-- 4. new_min_val - минимальная граница

-- 5. new_max_val - максимальная граница

-- выход: нет

-- эффекты:

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

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

-- 1. имя не должно быть занято

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

def create_param(new_name, new_short_name, new_unit_id, new_min_val, new_max_val):

try:

# Вставка новой записи в таблицу param

cursor.execute('''SELECT unit_name FROM unit WHERE id = ?''', (new_unit_id,))

is_unit_exist = cursor.fetchone()

if not is_unit_exist:

print(f'Ошибка в create_param: Единицы измерения не сушествует.')

cursor.execute('''

INSERT INTO param(param_name, param_short_name, unit_id, min_val, max_val)

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

''', (new_name, new_short_name, new_unit_id, new_min_val, new_max_val))

# Проверка количества вставленных строк

if cursor.rowcount == 1:

conn.commit()

print(f'параметр с именем {new_name} успешно добавлен.')

return 1

else:

conn.rollback()

return 0

except sqlite3.Error as e:

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

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

conn.rollback()

return 0

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