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

Python中MySQLdb查询数据库表时出现1064语法错误的解决方法

解决MySQL语法错误及代码优化方案

嘿,我一眼就瞅出问题所在了!你的错误根源是SQL语句里多了一个多余的右括号,而且代码还存在潜在的SQL注入风险,咱们一步步来搞定:

1. 先修复SQL语法错误

看你execute里的SQL字符串:

'SELECT table_name FROM information_schema.tables where table_schema="{}";)'

最后面的);里多了一个),这直接让MariaDB解析SQL时卡壳,把它删掉就解决了语法报错的核心问题。

2. 优化代码,避免SQL注入

直接用format拼接SQL字符串是不安全的——如果__database变量里有特殊字符或者被恶意注入,很容易出问题。咱们换成数据库驱动支持的参数化查询,既安全又规范,修正后的完整方法如下:

def get_tables(self):
    # 用参数化占位符%s替代直接拼接,同时修复语法错误
    self.__cursor.execute(
        'SELECT table_name FROM information_schema.tables WHERE table_schema = %s;',
        (self.__database,)
    )
    query_result = self.__cursor.fetchall()
    # 简化返回逻辑,更简洁直观
    return query_result if self.__cursor.rowcount else False

3. 补充调用注意点

你写的调用代码query_result = get_tables()其实是不规范的,因为get_tables是对象方法,必须通过类实例来调用,比如:

# 假设你的数据库连接实例是db_instance
query_result = db_instance.get_tables()
for record in query_result:
    print(record[0])  # Python3里print要加括号,Python2可以不加,建议统一规范写法

不过你说控制台能输出预期结果,应该是实际调用时用了实例,但还是提一句避免后续踩坑。

这样修改后,多余的右括号被移除,SQL语法完全正确,同时代码更安全,那个烦人的ProgrammingError就不会再出现啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:43