gpt4 book ai didi

Python - 将列表作为参数传递给 SQL,以及更多变量

转载 作者:行者123 更新时间:2023-12-01 03:17:06 25 4
gpt4 key购买 nike

我试图在 python 3.6 中将未知数量的参数传递给 SQL Server。这是我使用 pypyodbc 的代码:

cursor = cnxn.cursor()
theargs= ['1033286869','1053474957','1063654630','1104116235','1104910306','JASON']

thesql = """SELECT *
FROM BI_DUPLICATES_STAGE_0
WHERE DUP_ID IN (?, ?, ?, ?, ?)
AND FRST_NM = ?
"""
cursor.execute(thesql, theargs)
resultset = cursor.fetchall()

这有效。但是,我永远不确定我将拥有多少个 DUP_ID。我见过一些使用列表的示例,但是如果我有另一个变量,例如本例中的 FRST_NM,那么我就不能只使用列表。

因此,如果有人可以提供一个简单的示例,其中包含一个列表(不同长度)和另一个变量以及如何让 SQL 运行,我将不胜感激!如果这是问题所在并且还有另一种方法可以做到这一点,我不必使用 pypyodbc。

更新:感谢您提供格式良好的答案。只是一个快速的后续问题。我仍然有点不清楚如果我必须生成如下内容,我将如何格式化两个列表:
从 BI_DUPLICATES_STAGE_0 选择 *
其中 DUP_ID 在(1033286869、1053474957、1063654630、1104116235、1104910306)
AND MID_NM IN ('史密斯','乔恩')
AND FRST_NM = '杰森'

如果没有良好的格式连接,我会遇到这样的困惑:
从 BI_DUPLICATES_STAGE_0 选择 *
WHERE DUP_ID IN (?,?,?,?,?)
AND MID_NM IN (?,?)
和 FRST_NM = ?

如何按照建议格式化列表两次?请记住,我不知道每个列表(ID 和 MID_NM)实际上有多长。

最佳答案

考虑格式化字符串以根据列表、theargsotherargs 的长度动态构建 ? 占位符。请注意,姓氏应位于参数列表的末尾,以对应于最后一个 ? 占位符。构建准备好的语句后,将参数值传递给 cursor.execute():

theargs= ['1033286869','1053474957','1063654630','1104116235','1104910306']
otherargs = ['SMITH','JON']
lastarg = ['JASON']
allargs = theargs + otherargs + lastarg

thesql = """SELECT *
FROM BI_DUPLICATES_STAGE_0
WHERE DUP_ID IN ({})
AND MID_NM IN ({})
AND FRST_NM = ?
""".format(",".join(['?' for i in range(len(theargs))]),
",".join(['?' for i in range(len(otherargs))]))
print(thesql)

# SELECT *
# FROM BI_DUPLICATES_STAGE_0
# WHERE DUP_ID IN (?,?,?,?,?)
# AND MID_NM IN (?,?)
# AND FRST_NM = ?

cursor.execute(thesql, allargs)

关于Python - 将列表作为参数传递给 SQL,以及更多变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42375124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com