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)