【问题标题】:Writing a Pandas Dataframe to MySQL将 Pandas 数据框写入 MySQL
【发布时间】:2017-02-17 18:42:39
【问题描述】:

我正在尝试将 Python Pandas 数据框写入 MySQL 数据库。我意识到可以使用 sqlalchemy for this,但我想知道是否还有另一种可能更简单的方法,最好是已经内置在 Pandas 中。我花了相当长的时间尝试使用 For 循环来实现它,但这并不可行。

如果有人知道更好的方法,将不胜感激。

非常感谢!

【问题讨论】:

  • to_sql 方法对我有用。但是,请记住,它看起来将被弃用以支持 SQLAlchemy:FutureWarning:不推荐使用带有 DBAPI 连接的“mysql”风格,并将在未来的版本中删除。 SQLAlchemy 可连接对象将进一步支持 MySQL。 chunksize=chunksize, dtype=dtype)
  • 到目前为止仍然处于活动状态,因此直到将被弃用,这将需要一些时间,如果您不升级 pandas,则应该可以正常工作。发布答案比。
  • 为什么要避免使用 sqlalchemy?您所需要的只是初始化引擎而不是原始连接,用它替换风味。

标签: python mysql dataframe


【解决方案1】:

sqlalchemy 的另一个选项可以使用 to_sql,但在未来发布将被弃用,但现在在版本 pandas 0.18.1 文档 中是仍然活跃。

根据 pandas 文档pandas.DataFrame.to_sql,您可以使用以下语法:

DataFrame.to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)

你指定con type/mode和flavor 'mysql',这里有一些描述:

con : SQLAlchemy 引擎或 DBAPI2 连接(传统模式) 使用 SQLAlchemy 可以使用该库支持的任何数据库。如果是 DBAPI2 对象,则仅支持 sqlite3。

flavor : {'sqlite', 'mysql'}, default 'sqlite' SQL 的味道 采用。使用 SQLAlchemy 引擎时忽略。 'mysql' 已弃用,并且 将在以后的版本中删除,但会进一步支持 通过 SQLAlchemy 引擎。

【讨论】:

    【解决方案2】:

    你可以使用pymysql来做到这一点:

    例如,假设您有一个 MySQL 数据库,其中包含下一个用户、密码、主机和端口,并且您想要写入数据库“data_2”。

    import pymysql
    user = 'root'
    passw = 'my-secret-pw-for-mysql-12ud'
    host =  '172.17.0.2'
    port = 3306
    database = 'data_2'
    

    如果您已经创建了数据库

    conn = pymysql.connect(host=host,
                           port=port,
                           user=user, 
                           passwd=passw,  
                           db=database,
                           charset='utf8')
    
    data.to_sql(name=database, con=conn, if_exists = 'replace', index=False, flavor = 'mysql')
    

    如果您没有创建数据库,当数据库已经存在时也有效:

    conn = pymysql.connect(host=host, port=port, user=user, passwd=passw)
    
    conn.cursor().execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database))
    conn = pymysql.connect(host=host,
                           port=port,
                           user=user, 
                           passwd=passw,  
                           db=database,
                           charset='utf8')
    
    data.to_sql(name=database, con=conn, if_exists = 'replace', index=False, flavor = 'mysql')
    

    类似的线程:

    1. Writing to MySQL database with pandas using SQLAlchemy, to_sql
    2. How to insert pandas dataframe via mysqldb into database?

    【讨论】:

    • 看来这在 0.25 中不起作用。 to_sql 调用不再支持 flavor= 并假定它是一个 sqlite 连接,如果它不是 sqlalchemy 可连接的。
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多