是否可以在查询返回值之后立即在数据库上执行提交(如果该值未被获取)?查询中的 returning 语句是否锁定游标并在未获取值时阻止提交?
示例/如何重现
给定下表products
,构建如下:
create table products (id INTEGER, name TEXT, price INTEGER, PRIMARY KEY (id));
可以执行以下用于插入元素的查询,而不会出现任何错误:
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
query1 = 'insert into products (id, name, price) values (?,?,?)'
cursor.execute(query1, (1, 'apple', 100))
conn.commit()
不过,当使用返回元素ID的查询(例如
query2 = 'insert into products (id, name, price) values (?,?,?) returning id'
cursor.execute(query2, (2, 'cherry', 250))
conn.commit()
将引发以下错误
OperationalError: cannot commit transaction - SQL statements in progress
2条答案
按热度按时间yyyllmsg1#
使用lastrowid:
trnvg8h32#
我知道这件事已经有一段时间了,但以防万一它能帮助到别人。
为了让你的代码能够使用 returning 子句,你需要在提交之前先获取结果: