You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用MySQL时WITH AS语法报1064错误,求修正方案

修正MySQL CTE(WITH AS)在Python中的语法错误

问题背景

我的表test_table结构如下:

idname
1aa
2bb
3cc

使用Python调用MySQL时,执行带WITH AS的SQL语句报错:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test as(SELECT * from test_table) SELECT name FROM test' at line 1

出错的Python代码:

cnxn = mysql.connector.connect(**sql_config)
cursor = cnxn.cursor()
query = """
           with test as(SELECT * FROM `test_table`)  
           SELECT * FROM test
        """
cursor.execute(query)
get_data = cursor.fetchall()
cnxn.close()
cursor.close()

已知两种正常场景:

  • 在Sequel Ace中执行以下SQL可正常运行:
with `test` as ( SELECT * FROM `test_table`)
SELECT `name` FROM `test`
  • Python中执行不带WITH AS的查询无问题:
query = """
           SELECT name FROM test_table
        """

修正方案

问题根源是SQL语句的语法格式问题,结合MySQL的CTE规则,做以下调整:

  1. 规范CTE语法格式
    MySQL要求WITH子句和后续的主查询之间要紧密衔接,同时建议给CTE名称加上反引号避免冲突,修正后的查询语句:

    query = """
               WITH `test` AS (SELECT * FROM `test_table`)
               SELECT * FROM `test`
            """
    

    也可以使用紧凑写法,避免缩进带来的空格干扰:

    query = "WITH `test` AS (SELECT * FROM `test_table`) SELECT * FROM `test`"
    
  2. 检查MySQL版本兼容性
    注意:MySQL 8.0及以上版本才支持WITH AS(CTE)语法,如果你的MySQL版本低于8.0,必须改用子查询替代:

    query = "SELECT * FROM (SELECT * FROM `test_table`) AS `test`"
    

内容的提问来源于stack exchange,提问作者cocoa cocoa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 02:54:23