我正在使用 SQLite3 和 Python 3。我当前的代码中有很多地方需要选择新插入记录的主键值。主键是自动递增的,我更愿意保持这种方式(而不是自己生成主键并在 Python 端跟踪它们)。
我分两步执行此操作 -SELECT
之后INSERT
- 但我想知道是否没有一种方法可以一步完成以提高效率,使用JOIN
.
编辑:有人向我指出,在较早的问题中已经有一个解决方案using ,这确实比两个语句cursor.lastrowid
快得多(下面的代码使用上面链接到的解决方案中的示例):execute
timeit
$ python -m timeit -s "\
> import sqlite3;\
> connection=sqlite3.connect(':memory:');\
> cursor=connection.cursor();\
> cursor.execute('''CREATE TABLE foo (id integer primary key autoincrement ,\
> username varchar(50),\
> password varchar(50))''')" "\
> cursor.execute('INSERT INTO foo (username,password) VALUES (?,?)',\
> ('test','test'));\
> found = cursor.execute('''SELECT id FROM foo \
> WHERE username='test' \
> AND password='test' ''')"
100000 loops, best of 3: 10.1 usec per loop
$
$ python -m timeit -s "\
> import sqlite3;\
> connection=sqlite3.connect(':memory:');\
> cursor=connection.cursor();\
> cursor.execute('''CREATE TABLE foo (id integer primary key autoincrement ,\
> username varchar(50),\
> password varchar(50))''')" "\
> cursor.execute('INSERT INTO foo (username,password) VALUES (?,?)',\
> ('test','test'));\
> found = cursor.lastrowid"
100000 loops, best of 3: 5.74 usec per loop
$
任何人都可以谈论这样做的可能性吗?JOIN
相反,它仍然涉及单个execute
但严格限于 SQL 命令?