有没有办法在 SQL Server 2005 中使用 pyodbc 插入并请求 scope_identity()?

5 投票
2 回答
4363 浏览
提问于 2025-04-16 08:58

我有一个很棒的pyodbc库。我尝试了下面的代码,它本来应该插入一行数据并返回这行的ID,但结果没有成功。顺便说一下,我在服务器上使用的是SQL Server 2005,客户端是Windows操作系统。

...
con = pyodbc.connect('conectionString', autocommit = True)
cur = con.execute(
                  "insert into sometable values('something');
                  select scope_identity() as id"
                  )
for id in cur:
   print id
...

有没有什么想法?

2 个回答

3

使用 SCOPE_IDENTITY() 是个不错的选择,因为使用 OUTPUT 和 @@IDENTITY 时会遇到一些限制和问题,特别是当有触发器的时候。

根据你的代码片段,你只需要添加一个调用 nextset 的语句,就可以获取到 ID 了。

...
con = pyodbc.connect('conectionString', autocommit = True)
cur = con.execute(
                  "insert into sometable values('something');
                  select scope_identity() as id"
                  )
cur.nextset()
for id in cur:
   print id
...
9

试试这个,用一句话加上OUTPUT这个部分。

cur = con.execute(
         "insert into sometable OUTPUT INSERTED.idcolumn values('something')"
         )
row = cur.fetchone()
lastrowid = row[0]

补充:这样做可以解决Joe S.提到的问题。

撰写回答