如何使用Python在UPDATE语句sqlite3中插入变量?

时间:2016-12-31 20:42:30

标签: python sqlite

如果我想用python在sqlite3中插入变量值,则编写以下语句。例如:

column = input("Column to update:")
update_user = input("Value to update:")
field_name = input("Where field name equal to:")
value = input("Value")

c.execute("UPDATE testing SET ? = ? WHERE ? = ?", (column, update_user, field_name, value))

conn.commit()

如果我想对 UPDATE 语句执行相同操作该怎么办?我试过这个并且给了我错误:

sqlite3.OperationalError: near "?": syntax error

这是我得到的错误:

{{1}}

1 个答案:

答案 0 :(得分:3)

这实际上是一个常见问题,在您的更新查询中,无法参数化列名。换句话说:

UPDATE testing SET ? = ? WHERE ? = ?
               THIS^       THIS^

不能是查询占位符,您必须以通常的方式插入它们 - 通过字符串格式化:

c.execute("""
    UPDATE 
        testing 
    SET 
        {0} = ? 
    WHERE 
        {1} = ?""".format(column, field_name), (update_user, value))

但是,您应该注意正确清理,验证columnfield_name值以防止SQL injection attacks