You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

额外注意事项

  1. 配置项笔误检查:你的代码中用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)。
  2. 版本兼容优化:Pandas 1.4.4发布于SQLAlchemy 2.0之前,若后续遇到其他兼容问题,可选择:
    • 升级Pandas至1.5.0及以上版本(对SQLAlchemy 2.0支持更完善)
    • 降级SQLAlchemy至1.4.x版本
  3. 手动连接管理场景:若需在同一连接中执行多步操作,可使用上下文管理器包裹:
    with engine.connect() as conn:
        df.to_sql("tableName", conn, if_exists='append', index=False, method=None)
        conn.commit()
    

内容的提问来源于stack exchange,提问作者FxxkDogeCoins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:25:24