在WHERE子句中传递列表python mysq

2024-05-04 06:09:44 发布

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

我正在尝试从数据库中的表中获取速度值列表。我想知道他们是否是一个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 但这有点太难理解了。你知道吗

提前谢谢


Tags: 方法函数命令数据库ids列表sqlparty
2条回答

当有多个要筛选的值时,请使用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所在的字符中选择startspeed(%s、%s、%s、%s)

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

您可以使用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关键字及其工作方式的更多信息。你知道吗

相关问题 更多 >