python - 使用 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()
解决方案
你在正确的轨道上。我刚试过这个,它对我有用:
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
推荐阅读
- c++ - 尝试释放 std::forward_list 指针的动态数组(C++)
- c - C 队列错误地存储值
- jupyter-notebook - 如何在 google colab 上运行 jupyter notebook,k 次并取得一些结果?
- firebase - 如何实现 Firestore 数据加密?
- r - ggplot:在一张图上绘制多个函数
- javascript - 试图处理卸载事件
- flutter - 不能将变量用作网络图像中的 URL,但直接在参数内使用 URL 可以正常工作。显示错误:URI 中未指定主机
- docker - Docker daemon.json --privileged
- ios - 如何在 JSON Swift iOS 中正确发送带有对象的数组
- html - 缩放时无法使用 display flex 滚动我的集中页面