我正在使用 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 后生成的主键?
您的做法是有效的。如果上面的片段由两个脚本同时执行,就不会有问题。
last_insert_rowid()
返回调用它的连接的最新 INSERT 语句的 rowid。您还可以通过执行 g.db.lastrowid
来获取 rowid。
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