【问题标题】:Pandas dataframe to_sql method with python3带有python3的熊猫数据框to_sql方法
【发布时间】:2017-10-19 03:59:20
【问题描述】:

我有一个包含许多不同列的 pandas 数据框,并希望将特定列插入到 mySQL 数据库中。

我从文档中了解到,这样做的方法是像这样使用to_sql

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

engine = create_engine(db)
data.to_sql(name='dbtable', con=engine, if_exists = 'append', index=False)

但是,当我在 python3 中运行它时,我收到以下 ImportError:

Traceback (most recent call last):
  File "myfile.py", line 130, in <module>
    engine = create_engine('mysql+mysqlconnector://user:password@localhost:port/db')
  File "/home/pohzihow/.local/lib/python3.5/site-packages/sqlalchemy/engine/__init__.py", line 387, in create_engine
    return strategy.create(*args, **kwargs)
  File "/home/pohzihow/.local/lib/python3.5/site-packages/sqlalchemy/engine/strategies.py", line 80, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/home/pohzihow/.local/lib/python3.5/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 110, in dbapi
    return __import__('MySQLdb')
ImportError: No module named 'MySQLdb'

在做一些研究后,我发现实际上是mySQLdb does not support python3,但是 pandas 的文档说它需要 SQLAlchemy 引擎才能连接到数据库。

有没有办法直接使用 python3 将我的 pandas 数据框输出到 mySQL 数据库中?

【问题讨论】:

  • SQLAlchemy 支持不同的 mySQL DBAPI,如 in the docs 所述。尝试使用其中列出的 API 之一。
  • 嗨@Kristof,感谢您的评论。我设法让它与 mysql-connector 驱动程序一起工作。您愿意发表您的评论作为答案,以便我接受吗?

标签: python mysql pandas


【解决方案1】:

使用 PyMySQL 模块。它是最新的,您需要在系统后台运行 MySQL。代码是这样的,

import pymysql, pandas as pd
part1 = pd.read_csv("your_file_location)
part2 = part1["Column 1 Name", "Column2 Name"]
#and further code of yours#
for i in your_pandas_dataset:
    sql = "INSERT INTO your_table_name(your_column_attributes) \
            VALUES ('%d', '%s', #and so on#) %\
            (i[1], i[2],#and so on#)"
            self.cursor.execute(sql)
            self.db.commit()

您需要使用循环插入数据。并将数据导入SQL数据库。

【讨论】:

    【解决方案2】:

    SQLAlchemy 支持不同的 mySQL DBAPI,如 in the docs 所述。在撰写本文时,这些是:

    • MySQL-Python
    • PyMySQL
    • MySQL 连接器/Python
    • CyMySQL
    • 我们的SQL
    • 谷歌云 SQL
    • PyODBC
    • 用于 Jython 的 zxjdbc

    尝试使用列出的 API 之一代替 mySQLdb。

    【讨论】:

    • 你是否让它在 to_sql 中工作?您能否更明确地说明您是如何做到这一点的?
    【解决方案3】:

    使用 pymysql 作为 DBAPI 扩展ƘɌỈSƬƠƑ 的答案

    import pandas as pd
    import pymysql
    from sqlalchemy import create_engine
    
    engine = create_engine("mysql+pymysql://USER:PASSWORD@HOST/DATABASE")
    con = engine.connect()
    
    data.to_sql(name='dbtable', con=engine, if_exists = 'append', index=False)
    

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 2020-10-10
      • 2017-03-31
      • 2015-01-02
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多