AttributeError:使用 df.to_sql() 时“连接”对象没有属性“连接”

Fxx*_*ins 12 python sqlalchemy mysql-connector pandas

我正在尝试通过 pandas 数据框将从网站检索的数据存储到 MySQL 数据库中。但是,当我进行函数调用时df.to_sql(),编译器会给我一条错误消息:AttributeError: 'Connection' object has no attribute 'connect'。我测试了几次,我确信既不存在连接问题,也不涉及表存在问题。代码本身有什么问题吗?我正在使用的代码如下:

    from sqlalchemy import create_engine, text
    import pandas as pd
    import mysql.connector

    
    config = configparser.ConfigParser()
    config.read('db_init.INI')
    password = config.get("section_a", "Password")
    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)
    
    conn = engine.connect()
    df.to_sql("tableName", conn, if_exists='append', index = False)
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪如下所示:

Traceback (most recent call last):
  File "/Users/chent/Desktop/PFSDataParser/src/FetchPFS.py", line 304, in <module>
    main()
  File "/Users/chent/Desktop/PFSDataParser/src/FetchPFS.py", line 287, in main
    insert_to_db(experimentDataSet, expName)
  File "/Users/chent/Desktop/PFSDataParser/src/FetchPFS.py", line 89, in insert_to_db
    df.to_sql(tableName, conn, if_exists='append', index = False)
  File "/Users/chent/opt/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py", line 2951, in to_sql
    return sql.to_sql(
  File "/Users/chent/opt/anaconda3/lib/python3.9/site-packages/pandas/io/sql.py", line 698, in to_sql
    return pandas_sql.to_sql(
  File "/Users/chent/opt/anaconda3/lib/python3.9/site-packages/pandas/io/sql.py", line 1754, in to_sql
    self.check_case_sensitive(name=name, schema=schema)
  File "/Users/chent/opt/anaconda3/lib/python3.9/site-packages/pandas/io/sql.py", line 1647, in check_case_sensitive
    with self.connectable.connect() as conn:

AttributeError: 'Connection' object has no attribute 'connect'
Run Code Online (Sandbox Code Playgroud)

我使用的pandas版本是1.4.4,sqlalchemy是2.0

我尝试多次执行sql查询,例如,CREATE TABLE xxx IF NOT EXISTSor SELECT * FROM,所有这些都给了我我希望看到的结果。

Pan*_*vos 16

我也刚刚遇到这个问题。Pandas 1.x 尚不支持 SqlAlchemy 2正如相关的 Github 问题所示, Pandas 的下一个版本将需要sqlalchemy<2.0. 现在您必须使用以下命令降级到 SqlAlchemy 1.4.x:

pip install --upgrade SQLAlchemy==1.4.46
Run Code Online (Sandbox Code Playgroud)

该问题是由于Pandas版本与SqlAlchemy 2.0不兼容造成的。SqlAlchemy 2.0于 2023 年 1 月 28 日发布,而当时最新的 Pandas 版本1.5.3也在 1 月 19 日发布。

熊猫确实支持sqlalchemy.engine.Connection。来自文档

缺点:qlalchemy.engine.(引擎或连接)或sqlite3.Connection

使用 SQLAlchemy 可以使用该库支持的任何数据库。为 sqlite3.Connection 对象提供旧版支持。用户负责 SQLAlchemy 可连接的引擎处理和连接关闭(请参阅此处)

我降级到 SqlAlchemy 1.4.46 并to_sql停止抱怨。

如果您使用,pip可以使用以下命令降级:

pip install --upgrade SQLAlchemy==1.4.46
Run Code Online (Sandbox Code Playgroud)

或者

pip install SQLAlchemy
pip install SQLAlchemy==1.4.46
Run Code Online (Sandbox Code Playgroud)