MySQL Connector查询语法错误是常见的数据库操作问题,以下是系统性的解决方案:
# 错误示例:缺少引号或括号
cursor.execute("INSERT INTO users (name, age) VALUES ('John, 30)")
解决方案: - 检查SQL语句的引号、括号是否配对 - 使用参数化查询替代字符串拼接
# 正确写法
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("John", 30))
# 错误:Table 'database.nonexistent_table' doesn't exist
cursor.execute("SELECT * FROM nonexistent_table")
解决方案: - 检查表名和列名拼写 - 确认当前数据库上下文 - 使用SHOW TABLES验证表是否存在
cursor.execute("SHOW TABLES")
print(cursor.fetchall()) # 查看所有表
# 错误:尝试将字符串插入INT列
cursor.execute("INSERT INTO products (price) VALUES ('not_a_number')")
解决方案:
- 检查表结构DESCRIBE table_name
- 确保插入的数据类型与列定义匹配
# 错误:使用保留字作为列名
cursor.execute("SELECT group FROM users")
解决方案: - 使用反引号(`)转义保留字 - 避免使用MySQL保留字作为标识符
cursor.execute("SELECT `group` FROM users")
print(cursor.statement) # 查看实际执行的SQL
import logging
logging.basicConfig(level=logging.DEBUG)
try:
cursor.execute(your_query)
except mysql.connector.Error as err:
print(f"Error: {err}")
print(f"SQL state: {err.sqlstate}")
print(f"Error code: {err.errno}")
# 好
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
# 不好(SQL注入风险)
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
- 先在MySQL客户端测试SQL语句 - 使用小规模数据测试
from mysql.connector import conversion
safe_value = conversion.MySQLConverter().escape("O'Reilly")
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
通过以上方法,您可以系统地诊断和解决MySQL Connector中的查询语法错误。