Python执行MySQL建表语句触发1064(42000)语法错误如何解决
问题定位
- 1064 (42000)属于MySQL语法错误类报错,报错提示冲突位置为列定义的起始位置
Rank INT(3),核心原因是Rank是MySQL的保留关键字,不能直接作为列名/表名等标识符使用。
解决方案
有两种可行修复方式,按需选择即可:
方式1:保留原字段名,用反引号包裹保留关键字
把SQL语句中作为字段名的Rank用英文反引号包裹,告知MySQL这是自定义标识符而非内置关键字,修改后的查询语句如下:
query = "CREATE TABLE Riders_championship(`Rank` INT(3), Rider_name CHAR(20), Nation CHAR(12), Team VARCHAR(20), Points INT(3))"
方式2:更换字段名避开保留字
将字段名修改为非保留字的命名,比如改为rider_rank,从根源避免关键字冲突:
query = "CREATE TABLE Riders_championship(rider_rank INT(3), Rider_name CHAR(20), Nation CHAR(12), Team VARCHAR(20), Points INT(3))"
后续避坑提示
- 建表定义标识符时尽量避开MySQL内置函数、关键字命名,常见容易踩坑的保留字还有
name、order、desc、group等 - 拿不准某个词是否为保留字时,可以先在本地测试环境单独执行SQL语句测试,不用跑完整Python代码就能快速验证语法正确性
内容的提问来源于stack exchange,提问作者Abhishek_Mestry
相关产品推荐
相关产品推荐

