python - 在 python 中运行 session.execute 后获取插入行的主键
问题描述
我有一个名为报告的 MS SQL 表,其结构如下。我想获取刚刚插入的行的row_id:
r_id int NOT NULL IDENTITY,
report_type int,
report_source varchar,
received_date datetime,
我创建了一个引擎和 session_scope() 来处理连接。我的代码如下所示:
with session_scope() as session:
result_object = session.execute("""INSERT INTO reports (report_type, report_source, received_date) VALUES (3, 'Email', '24-06-2021 12:00')""")
session.commit()
for res in result_object:
print "report id of inserted row is: ", res['r_id']
除此之外,我还尝试了 fetchone() 但我总是收到以下错误:
ResourceClosedError:此结果对象不返回行。它已自动关闭。
出于绝望,我还尝试在查询末尾添加“RETURNING *”,但我得到“ProgrammingError:'RETURNING'附近的语法不正确。”还有什么其他可靠的方法来获取已加载行的报告ID。PS。我不想使用 ORM,我知道这可以在 ORM 中通过 session.add(object) 然后“object.r_id”轻松完成。当我使用查询时,我们该怎么做?
解决方案
也许您可以使用 OUTPUT (https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15)。假设您的 id 列是report_id
"""INSERT INTO reports (report_type, report_source, received_date)
OUTPUT Inserted.report_id
VALUES (3, 'Email', '24-06-2021 12:00')"""
推荐阅读
- node.js - 需要 npm 407 代理身份验证 - 获取 https://registry.npmjs.org/{package}
- c# - 尝试从 Azure Web 应用程序联系外部 Web 服务时出现间歇性 SocketException
- python - 使用python循环遍历字典中的值以根据键更改值
- ios - 从 Kotlin Native 继承 UIView
- node.js - 如何从另一条路由请求数据?
- python - “标签”对象在 for 循环中没有属性“计数”
- android - FirebaseMessaging 返回空令牌
- xml - 经典 ASP 特定节点信息
- javascript - Wordress acf 扩展的谷歌地图字段从电子邮件中的表单获取 lon/lat
- apache - Apache ProxyPass 用于从 blog 开始的所有 url