python中的SQLite3 UPDATE错误

时间:2011-11-15 01:10:38

标签: python sql sqlite sql-update

我收到“操作员错误附近”?“”运行以下SQL语句时出错;

    key = 'field_a'
    value = '01/01/2011'
    #self.testac = '010101010'

    self.qry.execute('''UPDATE data_base SET ?=? WHERE atnumber = ?''',(key, value, self.testac))
    self.qry.commit()

键和值是根据用户想要编辑的字段动态生成的,这就是SET语句有的原因?=?

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

猜测,?语法仅用于参数绑定。也就是说,插入绑定参数的转换为适当格式化和转义的字符串。它不是一般的字符串替换工具 - 只需对列名使用常规字符串替换。

例如,您可以使用:

key = 'field_a'
value = '01/01/2011'
#self.testac = '010101010'

sql = '''UPDATE data_base SET %(key)s=? WHERE atnumber = ?''' % dict(key=key)
self.qry.execute(sql, (value, self.testac))

答案 1 :(得分:2)

?语法仅用于绑定值以防止注入攻击(example)。

如果你打算在=的左侧接受用户输入,你必须确保自己消毒。要动态生成语句,任何python字符串方法都可以, 但你真的不应该这样做。

更好的方法是使用对{key:sql_str}

字典
call_dict = {'col_name':'UPDATE data_base SET col_name=? WHERE atnumber=?'}
self.qry.execute(call_dict[key],(value,self.testac))

[编辑,修正错误]