You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pyodbc向SQL Server插入数据后如何获取新增行的主键ID?

问题解答

完全可以无需额外发起单独的SELECT查询获取新插入行的自增ID,SQL Server原生支持两种常用实现方案:

方案1:使用SCOPE_IDENTITY()函数

这是最常用的轻量方案,SCOPE_IDENTITY()会返回当前会话、当前作用域内最后生成的自增ID,不会被其他会话或触发器生成的自增值干扰,比@@IDENTITY安全性更高。
修改后的代码如下:

connection = pyodbc.connect(...)
cursor = connection.cursor()
# 插入语句后直接拼接SELECT SCOPE_IDENTITY(),一次请求完成操作
cursor.execute("insert into employee(firstname, lastname) values(?, ?); SELECT SCOPE_IDENTITY()", ['John','Myers'])
# 直接取查询结果的第一个值就是新生成的ID
new_employee_id = cursor.fetchone()[0]
# 别忘了提交事务(如果没开启自动提交的话)
connection.commit()

方案2:使用OUTPUT子句

如果需要同时返回插入行的多个字段,或者担心触发器等场景对SCOPE_IDENTITY()的影响,可以用SQL Server的OUTPUT语法,直接在INSERT语句中指定要返回的字段:

connection = pyodbc.connect(...)
cursor = connection.cursor()
cursor.execute("insert into employee(firstname, lastname) OUTPUT inserted.ID values(?, ?)", ['John','Myers'])
new_employee_id = cursor.fetchone()[0]
connection.commit()

两种方案都只需要一次和数据库的交互,不需要单独发起SELECT查询,性能和安全性都能满足常规业务需求。


内容的提问来源于stack exchange,提问作者iammdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:00:03