Sqlite。除了last_insert_rowid()之外,如何获取插入后自动递增主键的值?

问题描述 投票:0回答:2

我正在使用 Sqlite3 和 Flask 微框架,但这个问题只涉及 Sqlite 方面..

这是代码片段:

g.db.execute('INSERT INTO downloads (name, owner, mimetype) VALUES (?, ?, ?)', [name, owner, mimetype])
file_entry = query_db('SELECT last_insert_rowid()')
g.db.commit()

downloads
表还有另一列,具有以下属性:
id integer primary key autoincrement,

如果两个人同时编写上面的代码可能会产生错误。

交易可能会很混乱。在 Sqlite 中,是否有一种简洁的内置方法可以返回执行 INSERT 后生成的主键?

python sqlite flask
2个回答
43
投票

您的做法是有效的。如果上面的片段由两个脚本同时执行,就不会有问题。

last_insert_rowid()
返回调用它的连接的最新 INSERT 语句的 rowid。您还可以通过执行
g.db.lastrowid
来获取 rowid。


0
投票

SQLite 有一个用于 INSERT 的 reuring 子句;

参见https://www.sqlite.org/lang_insert.html

演示:

sqlite> .schema test
CREATE TABLE temp.test(
id integer primary key autoincrement, value integer);

sqlite> insert into test (value) values (44) RETURNING id;
10

© www.soinside.com 2019 - 2024. All rights reserved.