SQL中如何将复合字段作为单个字段插入及参数不匹配报错解决
报错根因
你遇到的报错和复合字段、日期类型被拆分为多个参数无关,核心原因是mysql.connector 模块使用的参数占位符并非?,而是%s,占位符不匹配导致参数和SQL语句无法对应,才抛出参数未全部使用的错误。
修复方法
将SQL语句内的所有?占位符替换为%s即可,修改后的代码如下:
for row in dfp.itertuples(): cursor.execute(''' INSERT INTO athletes(id, season, name) VALUES (%s,%s,%s) ''', ( row.id, row.season, row.name, ) )
补充说明
- 不管是包含空格的姓名字符串、带特殊符号的文本,还是Python datetime类型的日期值,只要作为元组的单个元素传入,mysql.connector 会自动完成转义、类型适配,将其识别为单个参数插入对应字段,不会拆分单个值为多参数。
- 如果确实需要将多个Python变量拼接为单个字段值插入,直接在Python层面完成拼接后再作为参数传入即可,不需要在SQL语句中做拼接处理,可避免SQL注入风险。
内容的提问来源于stack exchange,提问作者user15802129
相关产品推荐
相关产品推荐

