2017-05-19 19 views
0

多くの異なる列を持つpandasデータフレームがあり、特定の列をmySQLデータベースに挿入することができます。python3を使ったPandas dataframe to_sqlメソッド

私はそうする方法がそうのようなto_sqlを使用することをドキュメントから理解:私はのpython3でこれを実行すると

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) 

しかし、私は次はImportErrorを取得しています:

Traceback (most recent call last): 
    File "myfile.py", line 130, in <module> 
    engine = create_engine('mysql+mysqlconnector://user:[email protected]: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データベースに直接出力する方法はありますか?

+1

SQLAlchemyの異なるMySQLのDBAPIsをサポートしている、[ドキュメントに】記載されているように(http://docs.sqlalchemy.org/en/rel_1_1/dialects/mysql.html)。そこに記載されているAPIのいずれかを試してみてください。 –

+0

こんにちは@クリストフ、コメントいただきありがとうございます。私はそれをmysql-connectorドライバで動作させることができました。私はそれを受け入れることができるように答えとしてあなたのコメントを投稿したいですか? –

答えて

1

SQLAlchemyのは、別のmySQL DBAPIsのサポートを有しています。執筆時点では、これらは以下のとおりです。

  • のMySQL-Pythonの
  • PyMySQL
  • のMySQLコネクタ/ Pythonの
  • CyMySQL
  • OurSQL
  • のGoogle Cloud SQL
  • PyODBC
  • Jython用zxjdbc

mySQLdbの代わりにリストされているAPIのいずれかを使用してみてください。

+1

これはto_sqlで動作するようになったのですか?あなたはこれをどのようにして得たかについてもう少し明白になりますか? –

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データベースにインポートされます。 in the docsに記載されるように

関連する問題