我有一个包含许多不同列的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数据库?
答案 0 :(得分:3)
SQLAlchemy支持不同的mySQL DBAPI,如in the docs所述。在撰写本文时,这些是:
尝试使用列出的API之一而不是mySQLdb。
答案 1 :(得分:2)
使用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)
答案 2 :(得分:0)
使用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数据库。