Задать вопрос
@MrDexstor

Почему не работает создание триггера в Sqlite3?

Я начинающий разработчик, и пишу бота для телеграмма. Мне нужен сделать для этого бота базу данных, для хранения некоторых данных.
С созданием основных таблиц я разобрался, но мне нужны поля в которые автоматически будут подставлятся текущая дата или порядковый номер числа(автоинкремент).

Прошу не бить палками за код, с sql ранее не работал

У меня есть вот такой код :
import sqlite3 as sq
from conf_lib import Config

class DB:
    def __init__(self):
        self.db_file = Config().get('DATABASE', 'db_file')
        self.connection = sq.connect(self.db_file)
    
    def build_db(self):
        cursor = self.connection.cursor()
        
        user_tables = '''
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(255),
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    role TEXT DEFAULT 'user'
);
'''
        products_tables = '''
CREATE TABLE products (
    plu VARCHAR(255) PRIMARY KEY,
    name VARCHAR(255),
    barcodes TEXT
);
'''
        data_matrix_logs_tables = '''
CREATE TABLE data_matrix_logs (
    log_id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INT,
    request_type TEXT,
    tp_code TEXT,
    requested_count INT,
    request_date TEXT,
    processing_status TEXT CHECK (processing_status IN (Created', 'Revert', 'Complete')),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);
'''

        trigger = '''
CREATE TRIGGER IF NOT EXISTS set_request_date_and_status
BEFORE INSERT ON data_matrix_logs
FOR EACH ROW
BEGIN
    SELECT datetime('now') INTO NEW.request_date;
    SET NEW.processing_status = 'Создано';
END;
'''
        cursor.execute(user_tables)
        self.connection.commit()
        cursor.execute(products_tables)
        self.connection.commit()
        cursor.execute(data_matrix_logs_tables)
        self.connection.commit()
        cursor.execute(trigger)
        self.connection.commit()
        cursor.close()
        self.connection.close()


У меня возникает следующая ошибка:
Traceback (most recent call last):
  File "/storage/emulated/0/Download/Projects/datamatrix_bot/main.py", line 59, in <module>
    main()
  File "/storage/emulated/0/Download/Projects/datamatrix_bot/main.py", line 28, in main
    DB().build_db()
  File "/storage/emulated/0/Download/Projects/datamatrix_bot/dbw.py", line 56, in build_db
    cursor.execute(trigger)
sqlite3.OperationalError: near "INTO": syntax error


Мне нужна таблица data_matrix_logs, в которой должно быть автоматическое назначение log_id и автоподстановка текущей даты в поле request_date
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
В этом случае вам не нужны триггеры. Просто прочтите о
DEFAULT VALUES
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы