Sqlite3更新由变量定义的行

时间:2015-03-29 21:27:29

标签: python sqlite

不确定我是否正确地表达了标题,但基本上我的问题是是否可以让sqlite更新一行由变量定义?例如:

db.execute('''UPDATE CUSTOMER SET ? = ? WHERE CUSTOMER_ID = ?''', (title, info.get(), k))

其中'标题' (第一个问号)是'行'的名称。我想在表Customer中更新。我已经尝试过上面的代码,但它没有用。有人知道是否可以用sqlite3以任何方式做到这一点?

2 个答案:

答案 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