在python列表中的WHERE IN子句

时间:2016-03-30 00:26:26

标签: python mysql query-parameters

我需要在python中将一批参数传递给mysql。这是我的代码:

JOIN

问题是我想将名单传递给sql IN子句,同时我也想将id和puid作为参数传递给sql查询子句。我如何在python中实现这些?

2 个答案:

答案 0 :(得分:2)

考虑你想要的cursor.execute的论点。你想最终执行

cursor.execute("SELECT * FROM my_table WHERE name IN (%s, %s, %s) AND id = %s AND puid = %s;", ["name1", "name2", "name3", id, pid])

你是如何到达那里的?棘手的部分是在%s子句中获得IN s的可变数量。您可能从this answer看到的解决方案是动态构建它并将其格式化为字符串。

in_p = ', '.join(list(map(lambda x: '%s', names)))
sql = "SELECT * FROM my_table WHERE name IN (%s) AND id = %s AND puid = %s;" % in_p

但这不起作用。你得到:

TypeError: not enough arguments for format string

看起来Python对后两个%s s感到困惑,你不想替换它们。解决方案是告诉Python通过转义%s来区别对待%

sql = "SELECT * FROM my_table WHERE name IN (%s) AND id = %%s AND puid = %%s;" % in_p

最后,构建参数并执行查询:

args = names + [id, pid]
cursor.execute(sql, args)

答案 1 :(得分:-1)

sql = """ SELECT * from my_table WHERE name IN (%s) AND id=%(Id)s AND puid=%(Puid)s""".replace("%s", "%(Clause)s")
print sql%{'Id':"x", 'Puid': "x", 'Clause': "x"}

这可以帮到你。