首页 > 解决方案 > 我怎样才能为 sql 查询转义这个字符串?

问题描述

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

"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)

标签: pythonmysqlsqlescaping

解决方案


您不能?对整个列表使用占位符,它只能替换为单个值。

您需要将 的所有元素分散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, ()))

我从将“元组列表”转换为平面列表或矩阵中list(sum(aSet, ())得到了这个表达式


推荐阅读