首页 > 解决方案 > 使用 SQLAlchemy 从 INSERT 语句中获取 MSSQL 自动生成的 ID

问题描述

提前谢谢你,我一直在寻找没有成功的日子。我正在使用 SQLAlchemy 和 MSSQL。我只是插入一行,我想取回新创建记录的 id。

与 MSSQL 一起使用并返回 id 的 SQL 查询是:

INSERT INTO [table](...) OUTPUT inserted.ID VALUES (...)

我使用的炼金术语句是:

with connection() as conn:
    query = ...
    result_proxy = conn.execute(query)

如果您在 sql 控制台中运行查询,您会返回 ID,但我无法弄清楚如何从执行语句返回的 result_proxy 中获取它。

我尝试过但没有用的东西:

result_proxy.lastrowid
result_proxy.last_inserted_id
result_proxy.fetchone()
result_proxy.fetchall()

标签: pythonsqlalchemypymssql

解决方案


你在正确的轨道上。我刚试过这个,它对我有用:

import sqlalchemy as sa

# ...

# set up test environment
with engine.begin() as conn:
    conn.execute(sa.text("DROP TABLE IF EXISTS team"))
    conn.execute(
        sa.text(
            "CREATE TABLE team ("
            "id int identity primary key, "
            "prov nvarchar(5), "
            "city nvarchar(50), "
            "team_name nvarchar(50)"
            ")"
        )
    )

# perform the test
sql = """\
INSERT INTO team (prov, city, team_name) 
OUTPUT inserted.id
VALUES (:prov, :city, :team_name)
"""
with engine.begin() as conn:
    new_id = conn.execute(
        sa.text(sql), {"prov": "AB", "city": "Calgary", "team_name": "Flames"}
    ).scalar()
    print(new_id)  # 1

推荐阅读