LAST_INSERT_ID() 减一

Kyl*_*son 5 python mysql sqlalchemy

我有一个用 Python 编写的 Web 应用程序,使用 SQLAlchemy 进行数据访问。我正在尝试获取插入的最后一个插入 ID。当我使用 PyODBC 时,这段代码可以工作,但现在使用 SQLAlchemy 时,它似乎不起作用。 LAST_INSERT_ID()似乎始终返回一个相差一的 ID。

    query = text("""INSERT INTO HR_PunchBatch
    (StoreID, UserID, Source,Timestamp,Status)
        VALUES (:StoreID,:UserID,:Source,NOW(),:Status)""")

    g.engine.execute(query,
        StoreID=StoreID,
        UserID=session['UserID'],
        Source=source,
        Status='New')

    batch_id = g.engine.execute('SELECT LAST_INSERT_ID() AS id').fetchone()
    return batch_id['id']
Run Code Online (Sandbox Code Playgroud)

关于为什么这会减少 1 的任何想法(例如返回 8 而不是 9)?

Kyl*_*son 5

仍然不确定为什么查询返回不准确的 ID。但是,我似乎通过获取连接对象而不是使用隐式/无连接执行来解决该问题。也许它之前抓取了两个不同的连接,因此提供了不一致的结果:

    conn = g.engine.connect()

    query = text("""INSERT INTO HR_PunchBatch
        (StoreID, UserID, Source,Timestamp,Status)
        VALUES (:StoreID,:UserID,:Source,NOW(),:Status)""")

    conn.execute(query,
        StoreID=StoreID,
        UserID=session['UserID'],
        Source=source,
        Status='New')

    batch_id = conn.execute('SELECT LAST_INSERT_ID() AS id').fetchone()

    return batch_id['id']
Run Code Online (Sandbox Code Playgroud)