带绑定的PyQt SQL查询

时间:2016-11-22 05:28:12

标签: python sqlite pyqt pyqt5 qsqlquery

我试图在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

我丢失了情节吗?我错过了什么?

提前致谢。

1 个答案:

答案 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)