我在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'))
它出现没有错误。为什么?我怎么能解决它?
答案 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攻击,还可以处理数据类型转换,正确转义参数,这也可以解决当前问题。