Jen*_*nsz 2 python mysql query-parameters
我需要在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
Run Code Online (Sandbox Code Playgroud)
问题是我想将名称列表传递给 sql IN 子句,同时我还想将 id 和 puid 作为参数传递给 sql 查询子句。我如何在 python 中实现这些?
想想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])
Run Code Online (Sandbox Code Playgroud)
你怎么到那的?棘手的部分是%s在IN子句中正确获取s的可变数量。正如您可能从这个答案中看到的那样,解决方案是动态构建它并将其格式化为字符串。
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
Run Code Online (Sandbox Code Playgroud)
但这不起作用。你得到:
TypeError: not enough arguments for format string
Run Code Online (Sandbox Code Playgroud)
看起来 Python 对%s您不想替换的后两个s感到困惑。解决方案是告诉 Python%s通过转义 s 来区别对待这些s %:
sql = "SELECT * FROM my_table WHERE name IN (%s) AND id = %%s AND puid = %%s;" % in_p
Run Code Online (Sandbox Code Playgroud)
最后,构建参数并执行查询:
args = names + [id, pid]
cursor.execute(sql, args)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7341 次 |
| 最近记录: |