python-lis中的WHERE-IN子句

2024-04-27 00:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用python向mysql传递一批参数。这是我的代码:

sql = """ SELECT * from my_table WHERE name IN (%s) AND id=%(Id)s AND puid=%(Puid)s"""

params = {'Id':id,'Puid'  : pid}
in_p=', '.join(list(map(lambda x: '%s', names)))
sql = sql %in_p

cursor.execute(sql, names) #todo: add params to sql clause

问题是我想将名称列表传递给sqlin子句,同时我还想将id和puid作为参数传递给sql query子句。如何在python中实现这些功能?在


Tags: and代码infromidsql参数names
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])

你怎么去的?棘手的部分是在IN子句中获得%s的变量号。解决方案,正如您可能在this answer中看到的那样,是动态地构建它并%格式化为字符串。在

^{pr2}$

但这行不通。你会得到:

TypeError: not enough arguments for format string

看起来Python对第二个%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)
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"}

这对你有帮助。在

相关问题 更多 >