Сценарий:
У меня есть 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;