首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,1064 (42000),“您的MySQL语法有错误;.”

Python,1064 (42000),“您的MySQL语法有错误;.”
EN

Stack Overflow用户
提问于 2022-08-11 09:18:01
回答 1查看 428关注 0票数 0

这是我的桌子test_table

id名

1 aa

2 bb

3 cc

当它与python3一起运行时,我收到消息:

mysql.connector.errors.ProgrammingError: 1064 (42000):您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以便在第1行使用接近“test(从test_table中选择*)选择名称”的语法。

这是我的语法:

代码语言:javascript
复制
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()

错误可能在查询.的语法中。

因为我尝试了以下两个没有错误的方法:

1.续集Ace:使用“with”

代码语言:javascript
复制
with `test` as ( SELECT * FROM `test_table`)
SELECT `name` FROM `test`

2.python3 3:不使用“with”,而且可以工作

代码语言:javascript
复制
query = """
           SELECT name FROM test_table
        """

如何修改语法的“with as”?

代码语言:javascript
复制
query = """
          with test as(SELECT * FROM test_table)  
          SELECT * FROM test
        """
EN

回答 1

Stack Overflow用户

发布于 2022-08-11 10:51:11

我几乎可以肯定,您使用的是mysql的旧版本。通用表表达式特性(带有" with ")仅在版本8中引入。

以下的每一个版本都会返回完全相同的错误消息。见第一个小提琴

相同的查询从版本8开始运行非常完美,就像您在第二个小提琴例子上看到的那样

但这还没有结束。可以用如下所示的子查询替换CTE

代码语言:javascript
复制
SELECT name FROM (select 'XXX' name) q;

或者,如果你需要加入:

代码语言:javascript
复制
select x.name
  FROM (select 'XXX' name) x
  JOIN (select 'XXX' name union all select 'YYY') y
    ON x.name = y.name;

正如你在小提琴例子上看到的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73318242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档