为什么此查询在使用 flaskext.mysql 时无法正确执行,而在使用 MySQL workbench 时可以正确执行?

Why is this query not executing properly when using flaskext.mysql, when it executes correctly using MySQL workbench?

所以我有这个查询

query =  "SET @rownumber = 0; UPDATE students SET roll_no = (@rownumber := @rownumber+1) WHERE standard='{}' AND division='{}' ORDER BY fname, lname".format(standard, division)

当我尝试使用 cursor.execute(query) 运行 此查询时,我使用

得到以下错误
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE students SET roll_no = (@rownumber := @rownumber+1) WHERE standard='4' AN' at line 1")

但是当我 运行 它在 MYSQL workbench 上时,这个相同的查询工作正常?为什么它不工作,我怎样才能让它工作?

UPDATE students 
SET roll_no = (@rownumber := @rownumber+1) 
WHERE standard='{}' 
  AND division='{}' 
  AND (1 + (@rownumber := 0))
ORDER BY fname, lname

会发生什么?

执行计划生成器找到常量条件 AND (1 + (@rownumber := 0))(它不包含任何列)并在查询执行前对其求值一次以将其转换为常量。获得的值为 1,被视为 TRUE 常量,因此删除此条件。但是用户定义的变量在评估期间初始化。

此方法允许初始化变量和存储 ORDER BY 用法,因为它不会将查询转换为多 table 形式(如在子查询中初始化变量时),其中没有 ORDER BY 子句允许。