PyQt SQL 带绑定的查询
PyQt SQL Query with Bindings
我试图在 PyQt5 中编写一个 SQL 查询来更新 table 中的一些数据,但无法使查询工作。我已经阅读了无数论坛,但据我所知我的代码是正确的。我还从头到尾阅读了文档,所以也许我遗漏了什么?
我正在使用 PyQt5、python3.5 和 SQLITE。以下代码(lastError/lastQuery未显示):
self.sqlWrite('ct','MarkerSize',123)
def sqlWrite(self,tbl,var,val):
query = QtSql.QSqlQuery(self.db) # First create query instance.
# Prepare query with placeholders, then bind values.
query.prepare('UPDATE :tbl SET value=:val WHERE property=:var')
query.bindValue(0,tbl)
query.bindValue(1,val)
query.bindValue(2,var)
# Finally execute query.
query.exec_()
...产生错误:
near "?": syntax error Unable to execute statement
near "?": syntax error Unable to execute statement
UPDATE :tbl SET value=:val WHERE property=:var
Parameter count mismatch
我是不是丢剧情了?我错过了什么?
提前致谢。
A table 名称不是参数,因此您不能将值绑定到它。占位符旨在与文字值一起使用,而不是任意字符串。对于后者,你应该只使用普通的字符串插值:
query.prepare('UPDATE "%s" SET value=:val WHERE property=:var' % tbl)
query.bindValue(':val', val)
query.bindValue(':var', var)
要使用更通用的方法来转义标识符,请使用查询的 driver:
tbl = query.driver().escapeIdentifier(tbl, QSqlDriver.TableName)
query.prepare('UPDATE %s SET value=:val WHERE property=:var' % tbl)
我试图在 PyQt5 中编写一个 SQL 查询来更新 table 中的一些数据,但无法使查询工作。我已经阅读了无数论坛,但据我所知我的代码是正确的。我还从头到尾阅读了文档,所以也许我遗漏了什么?
我正在使用 PyQt5、python3.5 和 SQLITE。以下代码(lastError/lastQuery未显示):
self.sqlWrite('ct','MarkerSize',123)
def sqlWrite(self,tbl,var,val):
query = QtSql.QSqlQuery(self.db) # First create query instance.
# Prepare query with placeholders, then bind values.
query.prepare('UPDATE :tbl SET value=:val WHERE property=:var')
query.bindValue(0,tbl)
query.bindValue(1,val)
query.bindValue(2,var)
# Finally execute query.
query.exec_()
...产生错误:
near "?": syntax error Unable to execute statement
near "?": syntax error Unable to execute statement
UPDATE :tbl SET value=:val WHERE property=:var
Parameter count mismatch
我是不是丢剧情了?我错过了什么?
提前致谢。
A table 名称不是参数,因此您不能将值绑定到它。占位符旨在与文字值一起使用,而不是任意字符串。对于后者,你应该只使用普通的字符串插值:
query.prepare('UPDATE "%s" SET value=:val WHERE property=:var' % tbl)
query.bindValue(':val', val)
query.bindValue(':var', var)
要使用更通用的方法来转义标识符,请使用查询的 driver:
tbl = query.driver().escapeIdentifier(tbl, QSqlDriver.TableName)
query.prepare('UPDATE %s SET value=:val WHERE property=:var' % tbl)