3

sqlite を使用して sqlalchemy 挿入から最後に挿入された行 ID を取得しようとしています。これは簡単なはずですが、まだ理解できておらず、これまでの検索で何も見つかりませんでした。私はPythonの初心者で、同様の投稿がいくつかあることを知っているので、これが繰り返されないことを願っています. 以下は、いくつかの簡単なサンプル スクリプトです。

from sqlalchemy import *    
engine = create_engine('sqlite:///myTest.db',echo=False)
metadata = MetaData()

dbTable1 = Table('dbTable1', metadata,Column('ThisNum', Integer),Column('ThisString', String))
metadata.create_all(engine)
dbConn = engine.connect()

insertList={}
insertList['ThisNum']=1
insertList['ThisString']='test'
insertStatement = dbTable1.insert().values(insertList)
lastInsertID = dbConn.execute(insertStatement).inserted_primary_key

返される値は空です。を使用して同じ結果が得られます

lastInsertID = dbConn.execute(insertStatement).last_inserted_ids()

挿入後に別のステートメントを使用して、最後の行 ID を取得できます。

lastInsertID = dbConn.execute('SELECT last_insert_rowid();')

ただし、これはデータベースが実行間でアクセスされなかったことを保証するものではないため、返された ID が正しくない可能性があります。最後に、たとえば、insert ステートメントと select ステートメントを 1 回の実行で実行してみました。

lastInsertID = dbConn.execute('INSERT INTO "dbTable1" ("ThisNum", "ThisString") VALUES (1, "test"); SELECT last_insert_rowid();')

しかし、これによりエラーが発生します: sqlite3.Warning: 一度に実行できるステートメントは 1 つだけです。

どんな助けでも大歓迎です。ありがとう。

4

0 に答える 0