Python 为什么在使用flaskext.mysql时,当使用mysql workbench正确执行时,该查询不能正确执行?

Python 为什么在使用flaskext.mysql时,当使用mysql workbench正确执行时,该查询不能正确执行?,python,mysql,flask,flask-mysql,Python,Mysql,Flask,Flask Mysql,所以我有这个疑问 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.ProgrammingErr

所以我有这个疑问

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工作台上运行这个查询时,它工作得很好吗?为什么它不起作用?我怎样才能让它起作用

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

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


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

此方法似乎无法执行多查询。WHERE子句中的Init变量。@添加了nbk解释。