Я только что натолкнулся на представления и думаю, что это довольно изящная идея, однако я столкнулся с проблемой, заключающейся в том, что я не могу найти идентификатор строки, которая была только что вставлена в триггер перехвата.
Я не могу найти много информации в Google, поэтому вот пример с этой проблемой. Каждый раз, когда я вставляю строку, lastrowid
возвращает 0
, даже если она успешно вставлена. Есть ли способ вернуть идентификатор строки из триггера?
import sqlite3
connection = sqlite3.connect(':memory:')
cursor = connection.cursor()
cursor.execute("""
CREATE TABLE Test(
row_id INTEGER PRIMARY KEY,
val1 INTEGER DEFAULT 0,
val2 INTEGER DEFAULT 0
)
""")
cursor.execute('CREATE View TestView AS SELECT val1, val2 FROM Test')
cursor.execute("""
CREATE TRIGGER trig INSTEAD OF INSERT ON TestView
FOR EACH ROW
BEGIN
INSERT INTO Test (val1, val2) VALUES (NEW.val1, NEW.val2);
END;
""")
insert = 'INSERT INTO TestView (val1, val2) VALUES (10, 10)'
print(cursor.execute(insert).lastrowid)
#0
insert = 'INSERT INTO TestView (val1, val2) VALUES (10, 10)'
print(cursor.execute(insert).lastrowid)
#0
insert = 'INSERT INTO TestView (val1, val2) VALUES (10, 10)'
print(cursor.execute(insert).lastrowid)
#0