不确定我是否正确地表达了标题,但基本上我的问题是是否可以让sqlite更新一行由变量定义?例如:
db.execute('''UPDATE CUSTOMER SET ? = ? WHERE CUSTOMER_ID = ?''', (title, info.get(), k))
其中'标题' (第一个问号)是'行'的名称。我想在表Customer中更新。我已经尝试过上面的代码,但它没有用。有人知道是否可以用sqlite3以任何方式做到这一点?
答案 0 :(得分:2)
SQL参数旨在永远可解释为SQL对象(如列名);这是他们的主要用途之一。如果他们不这样做,他们就不会阻止SQL注入攻击。相反,title
值可以作为值正确转义,也可以完全拒绝,因为语法不允许该位置的值。
因此,您需要确保您的title
变量是正确的SQL对象名称(从不直接在此处获取用户输入)并使用的字符串格式值:
db.execute(
'''UPDATE CUSTOMER SET {} = ? WHERE CUSTOMER_ID = ?'''.format(title),
(info.get(), k))
您可能希望首先将title
与预定义的一组可能的列名匹配。
答案 1 :(得分:-1)
你能尝试这样吗
query = "UPDATE CUSTOMER SET %s = '%s' WHERE CUSTOMER_ID = %d" %(title, info.get(), k)
db.execute(query)
您可能需要commit
。