我如何转义此字符串以进行SQL查询?

时间:2018-12-09 04:13:18

标签: python mysql sql escaping

尝试将此查询与转义变量一起使用:

"UPDATE table_name SET status = ?, status_by = ? WHERE (unique_id, page_id) IN (?)", [req.body.action, req.body.status_by, aSet]

但最终出现此错误: “操作数应包含2列”

aSet的外观如下:(1234567890, 123),(1234567890, 123)

1 个答案:

答案 0 :(得分:1)

您不能在整个列表中使用?占位符,只能用单个值代替。

您需要将aSet的所有元素散布到单独的参数中,并在查询中为所有这些元素放置足够的?占位符。

qs = ",".join(["(?, ?)"]*len(aSet))
sql = """UPDATE table_name SET status = ?, status_by = ? 
    WHERE (unique_id, page_id) IN (%s)"""%(qs)
cur.execute(sql, [req.body.action, req.body.status_by] + list(sum(aSet, ()))

我从Transform "list of tuples" into a flat list or a matrix那里得到了list(sum(aSet, ())表达式