使用pandas.to_sql写入MySQL报字符串格式化参数不匹配错误如何解决
报错原因
- 核心问题是
pandas.DataFrame.to_sql方法默认仅兼容SQLAlchemy引擎对象作为数据库连接入参,直接传入pymysql原生连接时,pandas生成SQL语句的参数占位符逻辑和pymysql的字符串格式化规则不匹配,就会触发该报错,和DataFrame的字段是否为字符串类型无关。 - 次要场景:如果已经使用SQLAlchemy引擎仍报错,一般是DataFrame中存在嵌套类型值(如列表、字典、自定义对象),无法被自动格式化为SQL支持的字符串格式。
解决方法
- 优先使用SQLAlchemy构造数据库连接,替换原生pymysql连接,示例代码如下:
# 先安装依赖:pip install sqlalchemy pymysql from sqlalchemy import create_engine # 替换括号内的参数为你的数据库真实配置 engine = create_engine("mysql+pymysql://(用户名):(密码)@(数据库地址):(端口,默认3306)/(数据库名)?charset=utf8mb4") # 直接传入engine执行写入即可 my_df.to_sql("KNIHY", engine, if_exists="append", index=False)
- 若有特殊场景必须使用pymysql原生连接,可自定义插入方法适配参数规则,该方案兼容性较差,非必要不推荐。
- 更换连接后仍报错的话,遍历检查DataFrame所有列的元素类型,提前将嵌套结构、特殊对象转换为标准字符串,空值统一处理为None或空字符串后再执行写入。
内容的提问来源于stack exchange,提问作者vojtam
相关产品推荐
相关产品推荐

