Sqlite无法识别的令牌:“'''”

时间:2016-02-04 05:53:33

标签: python sqlite

我在python中使用sqlite3时遇到了问题。

def getEntryId(self, table, field, value, createNew=True):
    cur=self.con.execute("select rowid from %s where %s = '%s'" % (table, field, value))
    res=cur.fetchone()
    if res==None:
        cur=self.con.execute("insert into %s (%s) values('%s') " % (table, field, value))
        return cur.lastrowid
    else:
        return res[0]

然而,我遇到了这个: OperationalError:无法识别的标记:“'''”。我的第二行代码似乎不正确。 我无法弄清楚为什么,所以我做同样的事情:

cu.execute("select rowid from urllist where %s = '%s'" % ('url', 'yes'))

它出现没有错误。为什么?我怎么能解决它?

1 个答案:

答案 0 :(得分:1)

您应该参数化查询。您不能参数化表和字段名称,您可以使用字符串格式将表和字段名称插入查询,但请确保您信任源,或正确验证值:

query = "select rowid from {table} where {field} = %s".format(table=table, field=field)
cur = self.con.execute(query, (value, ))
res = cur.fetchone()

参数化不仅有助于防止SQL injection攻击,还可以处理数据类型转换,正确转义参数,这也可以解决当前问题。