триггер python sqlite3 перед "ЗАМЕНА" - PullRequest
0 голосов
/ 03 октября 2018

Сценарий:

У меня есть 2 таблицы: today_version (для хранения ежедневной последней информации) и history_version ( всякий раз, когда перед изменением записи в today_version старая запись будет сначала вставлена ​​в history_version длярезервное копирование и изменение в today_version ).

Они создаются:

CREATE TABLE IF NOT EXISTS today_version (
region TEXT,
instance TEXT,
version TEXT,
last_update_time TEXT,
PRIMARY KEY (region, version)
)     

CREATE TABLE IF NOT EXISTS history_version (
region TEXT,
instance TEXT,
version TEXT,
last_update_time TEXT
)     

Для ежедневного изменения в today_version есть 2 изменения: вставить новую запись (PRIMARY KEYне найден) или обновите версию & last_update_time (PRIMARY KEY существует).Таким образом, мой код python / pandas здесь становится:

df = pd.read_csv("data.csv")
query = '''insert or replace into today_version (region, instance, version, last_update_time) values (?,?,?,?,?)'''
conn.executemany(query, df.to_records(index=False))

Эта часть действительна, и я проверил в терминале:

$ sqlite3
$ > select * from today_version;
...... (record)

Затем я хотел бы использовать TRIGGER для достижениячасть: ( всякий раз, когда запись в today_version изменяется, она будет вставлена ​​в history_version для резервного копирования ).

Однако, из CREATE TRIGGER , только "вставка",«delete», «update» поддерживается для триггера, где «replace» фактически сначала удаляет эту строку, а затем вставляет новую.

Могу я спросить, как мне выполнить это требование?В настоящее время я пробую следующее, но не сработало (выдает пустую таблицу):

CREATE TRIGGER add_history BEFORE DELETE ON today_version
WHEN new.version != old.version
BEGIN
    INSERT INTO history_version (market, instance, version, last_update_time) VALUES (old.market, old.instance, old.version, old.last_update_time);
END; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...