gpt4 book ai didi

python - 如何通过 QSqlQuery.lastInsertId() 从 SQL Server 获取最后插入行的 ID?

转载 作者:行者123 更新时间:2023-11-30 23:42:10 25 4
gpt4 key购买 nike

如何通过 PyQt4.QtSql 模块从 SQL Server 获取最后插入行的 ID?现在我使用的是 SQL Server 2012 Express,但程序也必须在 SQL Server 2000 上运行。

这是我的代码(Python + PyQt)和结果:

from PyQt4.QtGui import QApplication
from PyQt4 import QtSql

app = QApplication([])
db = QtSql.QSqlDatabase.addDatabase("QODBC")
db.setDatabaseName('Driver={SQL Server Native Client 11.0};Server=(localdb)\\v11.0;')
db.open()

query = QtSql.QSqlQuery()
query.prepare("""CREATE TABLE Test(
ID INT PRIMARY KEY IDENTITY(1, 1),
Row nvarchar(255)
)
""")
query.exec_()

query = QtSql.QSqlQuery()
query.prepare('INSERT Test OUTPUT Inserted.ID VALUES(?)')
query.bindValue(0, 'Test')

query.exec_()

while query.next():
last_inserted_id = query.value(0)

print('OUTPUT: ', last_inserted_id)
print('QSqlQuery.lastInsertId: ', query.lastInsertId())

query = QtSql.QSqlQuery('SELECT SCOPE_IDENTITY()')

while query.next():
last_inserted_id_ = query.value(0)

print('SCOPE_IDENTITY: ', last_inserted_id_)

db.close()

结果:

OUTPUT:  1
QSqlQuery.lastInsertId: None
SCOPE_IDENTITY: <PyQt4.QtCore.QPyNullVariant object at 0x00000000032D88D0>

不幸的是,OUTPUT 子句受 SQL Server 2005 或更高版本支持。

Python 3.2.3 (x64)、PyQt 4.9.4、SQL Server 2012 Express

有什么想法吗?

编辑:

到目前为止,我使用SELECT @@IDENTITY

最佳答案

将我的评论移至答案,以便彻底关闭此问题:

我不懂Python,但我认为SCOPE_IDENTITY()只能在批处理中工作。因此,您可能需要将 ;SELECT SCOPE_IDENTITY() 添加到带有 INSERT 的查询中。希望这会有所帮助。

因此您的插入内容可能如下所示:

query = QtSql.QSqlQuery() 
query.prepare('INSERT Test VALUES(?); SELECT SCOPE_IDENTITY()')
query.bindValue(0, 'Test')

query.exec_()

while query.next():
last_inserted_id = query.value(0)

关于python - 如何通过 QSqlQuery.lastInsertId() 从 SQL Server 获取最后插入行的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com