为什么此查询在使用 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 子句允许。
所以我有这个查询
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 子句允许。