我试图在PyQt5中编写一个SQL查询来更新表中的某些数据,但无法使查询生效。我读了无数的论坛,但据我所知,我的代码是正确的。我也已经阅读了前面的文档,所以也许我错过了什么?
我正在使用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
我丢失了情节吗?我错过了什么?
提前致谢。
答案 0 :(得分:4)
表名不是参数,因此您无法将值绑定到它。占位符旨在与文字值一起使用,而不是任意字符串。对于后者,您应该使用普通的字符串插值:
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)