我正在尝试从数据库中的表中获取速度值列表。我想知道它们是否是SQL命令/方法,该方法是否允许我在WHERE函数中传递CharID列表,这样就不必创建FOR循环并单独进行四个搜索。
background-image
我对SQL比较陌生,可能缺少一些重要知识。
我确实尝试过: passing a list to a where clause 但这太难了。
预先感谢
答案 0 :(得分:0)
您可以使用IN关键字基于列表进行过滤。
party_ids= [4, 3, 1, 2]
def initializegame(party_ids):
#Get selected party members IDS
print(party_ids)
#Obtain Speeds
ids_string = ','.join(str(id) for id in party_ids)
mycursor.execute("SELECT startspeed FROM characters WHERE CharID IN ({0})".format(ids_string))
myspeeds=mycursor.fetchall()
print(myspeeds)
print("done")
您可以从此MySQL blog tutorial中找到有关IN关键字及其工作方式的更多信息。
答案 1 :(得分:0)
当您要过滤多个值时,请使用 IN 关键字。在这种情况下,您具有已知的整数值,因此SQL注入不是问题。但是,您的函数是在可以传递任意值的情况下编写的,在此情况下,SQL注入可能会成为问题,或者可能会传递需要转义的字符串文字。因此,需要通过让数据库驱动程序处理实际参数来解决这些问题:
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 变为:
从字符“ CHARID IN”(%s,%s,%s,%s)中选择启动速度
然后 execute 语句将4个 IN 值的列表作为第二个参数传递。