SQLite3 と Python 3 を使用しています。現在のコードには、新しく挿入されたレコードの主キー値を選択する必要がある場所がたくさんあります。主キーは自動インクリメントされます。私は、(自分で主キーを生成して Python 側でそれらを追跡するよりも) そのように維持することを好みます。
私はこれを 2 つのステップで行います —SELECT
その後INSERT
— しかし、効率を高めるためにJOIN
.
編集:以前の質問に解決策が既にあることが指摘されました。これは、実際には2つのステートメント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
ますか?