1

SQLite3 と Python 3 を使用しています。現在のコードには、新しく挿入されたレコードの主キー値を選択する必要がある場所がたくさんあります。主キーは自動インクリメントされます。私は、(自分で主キーを生成して Python 側でそれらを追跡するよりも) そのように維持することを好みます。

私はこれを 2 つのステップで行います —SELECTその後INSERT— しかし、効率を高めるためにJOIN.

編集:以前の質問に解決策が既にあることが指摘されました。これは、実際には2つのステートメントcursor.lastrowidよりもはるかに高速です(以下のコードは、上記のリンク先の解決策の例を使用しています):executetimeit

$ 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ますか?

4

1 に答える 1

1

INSERTステートメント内で結合を行うことはできません。

SQL コマンドを使用する場合は、 last_insert_rowid SQL 関数を使用できます。ただし、同じ値がコマンドによって既に返されており、Python のオブジェクトのlastrowid プロパティ、または他の言語のデータベース ラッパーの同等のプロパティでINSERT読み取ることができます。Cursor

于 2013-08-11T14:37:36.273 に答える