33

私はFlaskマイクロフレームワークでSqlite3を使用していますが、この質問は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,

2 人が同時に書き込むと、上記のコードでエラーが発生する可能性があります。

トランザクションが乱雑になる可能性があります。Sqlite には、INSERT を実行した後に生成された主キーを返す方法が組み込まれていますか?

4

1 に答える 1

39

あなたのやり方は有効です。上記の抜粋を 2 つのスクリプトで同時に実行しても問題ありません。last_insert_rowid()呼び出し元の接続の最新の INSERT ステートメントの行 ID を返します。を実行してROWIDを取得することもできますg.db.lastrowid

于 2010-08-09T16:26:42.837 に答える