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
相关产品推荐
相关产品推荐

