为什么 mysql 用户定义的变量在 python 中不起作用?

Why mysql user defined variable is not work in python?

我在 python 和 workbench 中有一个 SQL 运行,它们都 return 不同的结果。我认为主要原因是因为 @user defined variable 在我将它传递给 python mysql connector 时没有缓存,因此它无法执行计数功能。基本上,SQL 的逻辑是 运行k 每个超市(组)中的食物和 return 每个超市中的前 10 种食物(仅示例)。在 workbench 中,计数器将输出 1,2,3,4...,而在 python 中,它们 return 1 不进行计数。我该如何预防?谢谢!

Code:
    cnx= mysql.connector.connect(**config)
    cursor = cnx.cursor()

    query = f'''SELECT supermarket, food, counter
            FROM (
            SELECT supermarket, food, 
                @counter:=IF(@supermarket_id= supermarket, @counter+1,1) as counter, 
                @supermarket_id:= supermarket
            FROM supermkt_data 
            order by supermarket, food) tmp
            WHERE counter<= 10;
            '''
    log.info(query)
    cursor.execute(query)
    columns = [col[0] for col in cursor.description]
    result = [dict(zip(columns, row)) for row in cursor.fetchall()]

您必须初始化变量。如果不是,那么它们将被视为在查询执行期间不会更改的常量。

query = f'''SELECT supermarket, food, counter
            FROM ( SELECT supermarket, food, 
                          @counter:=IF(@supermarket_id=supermarket,@counter+1,1) counter, 
                          @supermarket_id:=supermarket
                   FROM supermkt_data 
                   CROSS JOIN (SELECT @supermarket_id:=0, @counter:=0) init_vars
                   ORDER BY supermarket, food) tmp
            WHERE counter <= 10;
         '''

根据需要调整变量的起始值。