gpt4 book ai didi

python - 在 WHERE 子句中传递列表 python mysql

转载 作者:行者123 更新时间:2023-11-29 16:02:05 25 4
gpt4 key购买 nike

我正在尝试从数据库中的表中获取速度值列表。我想知道它们是否是一个 SQL 命令/方法,允许我在 WHERE 函数中传递 CharID 列表,这样我就不必创建 FOR 循环并分别执行四个搜索。

party_ids= [4, 3, 1, 2]

def initializegame(party_ids):
#Get selected party members IDS
print(party_ids)
#Obtain Speeds
fetchspeed=("SELECT startspeed FROM characters WHERE CharID=%s")
print(fetchspeed)
mycursor.execute(fetchspeed,party_ids)
myspeeds=mycursor.fetchall()
print(myspeeds)
print("done")

我对 SQL 比较陌生,我可能错过了一些重要的东西。

我确实尝试过: passing a list to a where clause但这有点太难理解了。

提前致谢

最佳答案

当您要过滤多个值时,请使用 IN 关键字。在这种情况下,您已知整数值,因此 SQL 注入(inject)不是问题。但是你的函数是在可以传递任意值的地方编写的,其中 SQL 注入(inject)可能是一个问题,或者你可能会传递需要转义的字符串文字。因此,通过让数据库驱动程序处理实际参数来解决这些问题是值得的:

party_ids= [4, 3, 1, 2]

def initializegame(party_ids):
#Get selected party members IDS
print(party_ids)
#Obtain Speeds

in_params = ','.join(['%s'] * len(party_ids))
sql = "SELECT startspeed FROM characters WHERE CharID IN (%s)" % in_params
mycursor.execute(sql, party_ids)

myspeeds=mycursor.fetchall()
print(myspeeds)
print("done")

变量sql变为:

SELECT startspeed FROM characters WHERE CharID IN (%s,%s,%s,%s)

然后 execute 语句将 4 个 IN 值的列表作为第二个参数传递。

关于python - 在 WHERE 子句中传递列表 python mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56102312/

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