我正在尝试使用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()
我可以在插入后使用单独的语句获取最后一个rowid:
lastInsertID = dbConn.execute('SELECT last_insert_rowid();')
但这并不能保证在执行之间没有访问数据库,因此返回的ID可能不正确。最后,我尝试在一次执行中执行insert和select语句,例如:
lastInsertID = dbConn.execute('INSERT INTO "dbTable1" ("ThisNum", "ThisString") VALUES (1, "test"); SELECT last_insert_rowid();')
但是这会给出错误:sqlite3.Warning:你一次只能执行一个语句。
任何帮助将不胜感激。谢谢。