如何通过 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/