繁体   English   中英

带有python3的Pandas DataFrame to_sql方法

[英]Pandas dataframe to_sql method with python3

我有一个带有许多不同列的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实际上不支持python3 ,但是有关pandas的文档说它需要SQLAlchemy引擎才能连接到数据库。

有没有一种方法可以直接使用python3将我的pandas数据帧输出到mySQL数据库中?

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

  • MySQL的Python
  • PyMySQL的
  • MySQL连接器/ Python
  • CyMySQL的
  • 我们的SQL
  • Google Cloud SQL
  • PyODBC的
  • Zyjon的zxjdbc

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

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

使用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数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM