python - 无法获取 python 元组作为 WHERE IN SQL 子句中的输入?

标签 python mysql sql mysql-python

Python 代码:

查询是一个 UPDATE 查询,错误只是表明元组存在一些问题,该元组作为参数传递给 IN 子句

pyList是Python列表,DBOBJ是连接对象

pyTuple = tuple(pyList)
print(pyTuple)

pyTupleSQLFormat = DBOBJ.string_literal(pyTuple)
print(pyTupleSQLFormat)

query = "UPDATE seats SET isReserved = 1 WHERE screen_name='{}' AND seat_number IN %s".format(screenname)
args = (pyTupleSQLFormat,)
CurOBJ.execute(query,args)

控制台输出:Python

('B1', 'B2', 'A6', 'A7')
b"'(\\'B1\\', \\'B2\\', \\'A6\\', \\'A7\\')'"
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\\'(\\\\\\'B1\\\\\\', \\\\\\'B2\\\\\\', \\\\\\'A6\\\\\\', \\\\\\'A7\\\\\\')\\''' at line 1")

最佳答案

string_literal(...) 似乎正在准备将对象插入到字符/文本字段中,而不是以可以附加到查询的方式对其进行字符串化。

您可以通过dynamically building parameter placeholders将元组内容作为查询的附加参数传递。 。这具有使用参数化来避免 SQL 注入(inject)和相关问题的额外优点。

screen_name = "example"
seat_numbers = [1, 2, 3, 4]

args = tuple([screen_name] + seat_numbers)

query = """
UPDATE 
    seats 
SET 
    isReserved = 1 
WHERE 
    screen_name=%s AND 
    seat_number IN ({placeholders})
""".format(
    placeholders=",".join(["%s"] * len(seat_numbers)),
)
print(query)
print(args)

cursor.execute(query, args)

关于python - 无法获取 python 元组作为 WHERE IN SQL 子句中的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810721/

相关文章:

python - y 轴上有双方 block 的一维热图

python - Django 调试工具栏仅适用于管理部分

MYSQL:使用 SUBSTRING_INDEX 后我的数据更改/损坏(rtl 语言)

mysql - MySQL 中何时使用单引号、双引号和反引号

python - 当我运行测试用例时,出现此错误 : psycopg2. OperationalError: cursor "_django_curs_140351416325888_23"does not exist

python - 将基础矩阵的变化拟合到数据

mysql - 使用 having 添加一个新的选择字段

mysql - 将句点保存在首字母缩略词中还是不保存在数据库中?

sql - BigQuery 在 SELECT 中对多个字符串列的 CONCAT 进行排序

sql - 分组成json数组