PyQt5的QSqlQuery类有两个函数,exec()和exec_(),每种函数又有两种参数类型,其函数原型是:
exec(self, queryStr) -> bool
exec(self) -> bool
exec_(self, queryStr) -> bool
exec_(self) -> bool
在PyQt5.11.2及其以后版本中,exec()和exec_()功能没有差别,使用exec()即可。
但是在PyQt5.11.2以前的版本中,不带参数的exec()函数不能执行由prepare()和bindValue()设置的带参数的SQL语句,而只能用exec_()函数执行。这是PyQt5.11.2以前版本的一个Bug,在PyQt5.11.2版本中被修正。
在Riverbank官网发布的PyQt v5.11.2 Release News中对版本修改中有对此问题的说明
These are the cumulative changes since v5.10.1.
Added the missing QGuiApplication.inputMethod() method.
Added the missing QGuiApplication.styleHints() method.
Added the missing QSqlQuery.exec() overload for Python v3.
第一种带参数的函数exec(queryStr)或exec(queryStr)直接执行不带参数的SQL语句,在哪个PyQt5版本里都可以,如:
query=QSqlQuery(self.DB)
query.exec('''UPDATE employee SET Salary=3000 where Gender="女" ''')
query.exec_('''UPDATE employee SET Salary=3000 where Gender="女" ''')
第二种不带参数的函数exec()或exec_()执行由prepare()和bindValue()设置的带参数的SQL语句,如:
query=QSqlQuery(self.DB)
query.prepare('''UPDATE employee SET Salary=9000 where Gender=:Gender ''')
query.bindValue(":Gender","男")
query.exec() #PyQt5.11.2 以前版本只能用exec_()
若是PyQt 5.11.2及其以后版本,这里用exec()或exec_()都可以,但若是PyQt 5.11.2以前的版本,则只能使用exec_()。
版权声明:本文为HongAndYi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。