使用df.to_sql()时出现AttributeError: 'Connection'对象无'connect'属性
问题解决:AttributeError: 'Connection' object has no attribute 'connect'
错误原因
你遇到的问题源于两个核心点:
- 参数传值错误:
df.to_sql()的con参数需要传入SQLAlchemy的Engine对象,而非engine.connect()返回的Connection实例 - 版本兼容性逻辑:Pandas 1.4.4在配合SQLAlchemy 2.0时,内部会尝试调用传入连接对象的
connect()方法来创建新连接,但Connection实例本身没有该方法,因此触发报错
解决方案
直接将创建好的engine对象传入df.to_sql(),无需手动提前建立连接实例。
修正后的代码
from sqlalchemy import create_engine, text import pandas as pd import mysql.connector import configparser # 补充你遗漏的模块导入 config = configparser.ConfigParser() config.read('db_init.INI') password = config.get("section_a", "Password") # 注意:这里疑似笔误,配置项应该是Host而非Port,请根据你的配置文件调整 host = config.get("section_a", "Port") database = config.get("section_a", "Database") engine = create_engine( 'mysql+mysqlconnector://root:{0}@{1}/{2}'.format(password, host, database), pool_recycle=1, pool_timeout=57600, future=True ) # 直接传入engine,无需手动创建conn df.to_sql("tableName", engine, if_exists='append', index=False)
额外注意事项
- 配置项笔误检查:你的代码中用
Port配置项作为数据库主机地址,这大概率是笔误,建议确认配置文件,将主机和端口分开读取(例如host = config.get("section_a", "Host"),port = config.get("section_a", "Port")),再修改连接字符串为'mysql+mysqlconnector://root:{0}@{1}:{2}/{3}'.format(password, host, port, database)。 - 版本兼容优化:Pandas 1.4.4发布于SQLAlchemy 2.0之前,若后续遇到其他兼容问题,可选择:
- 升级Pandas至1.5.0及以上版本(对SQLAlchemy 2.0支持更完善)
- 降级SQLAlchemy至1.4.x版本
- 手动连接管理场景:若需在同一连接中执行多步操作,可使用上下文管理器包裹:
with engine.connect() as conn: df.to_sql("tableName", conn, if_exists='append', index=False, method=None) conn.commit()
内容的提问来源于stack exchange,提问作者FxxkDogeCoins
相关产品推荐
相关产品推荐

