我收到“操作员错误附近”?“”运行以下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语句有的原因?=?
有什么想法吗?
谢谢!
答案 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))
[编辑,修正错误]