PyMySQL写入animus_list表时出现SQL语法错误求助
排查MySQL插入SQL语法错误的常见方向
- 特殊字符未转义
动漫名称常包含单引号(比如JoJo's Bizarre Adventure)、双引号或反斜杠,直接拼接SQL会截断语句触发语法错误。别手动转义,直接用参数化查询:
# 示例(PyMySQL/MySQLdb) cursor.execute( "INSERT INTO animus_list (`name`, `score`, `rank`) VALUES (%s, %s, %s)", (cleaned_name, float(score), int(rank)) )
让数据库驱动自动处理特殊字符转义,避免语法问题。
- 字段/表名与保留字冲突
如果你的字段名是rank这类MySQL保留字,未加反引号包裹会触发语法错误。执行插入时给字段名加上反引号:
INSERT INTO animus_list (`name`, `score`, `rank`) VALUES (...)
- 数据类型不匹配
爬虫抓取的原始数据可能带多余字符(比如评分是"9.2/10"),或者字段是INT类型但你传入了字符串。先对数据做清洗和类型转换:
# 清洗评分,转成浮点数 score = float(anime_score.strip().split('/')[0]) # 清洗排名,转成整数 rank = int(anime_rank.strip().replace('#', ''))
确保插入值的类型和表字段定义完全匹配。
SQL语句拼接格式错误
直接打印拼接后的完整SQL语句,复制到MySQL客户端执行,看是否能复现错误。比如字段数量和值的数量不匹配、逗号遗漏、括号不闭合这类低级错误,直接在客户端里一眼就能发现。隐性特殊字符或编码问题
抓取的动漫名称可能包含零宽字符、全角空格这类不可见字符,或者表的编码不是utf8mb4导致字符无法解析。先清洗文本:
anime_name = anime_name.strip().replace('\u200b', '').replace('\uff00', '')
同时检查表的编码设置,确保是utf8mb4以支持所有Unicode字符。
内容的提问来源于stack exchange,提问作者JustAMan
相关产品推荐
相关产品推荐

