目的
pythonのdataframeはデータの前処理に大変便利で、前処理した後にそのままDBに挿入したい時が多々あります。今回はMySQLで試します。
環境
Python 3.7.3
MySQL 5.5.62
Step1 : 挿入先テーブル用意
以下のようにテスト用のテーブルを定義します。
> CREATE DATABASE testdb;
> CREATE TABLE testdb.mysql_table(
col1 int
,col2 int
,col3 int
);
Step2 : 挿入用データ準備
Pythonから挿入するためのデータを準備します。pandasのDataFrameで挿入先テーブルの型にあったデータを用意します。注意点として、データフレーム側に挿入先カラムと同じ名称のカラム名をセットしておかないと、挿入時にエラーが発生しますので、忘れずにセットします。
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6]],columns=['col1','col2','col3'])
print(df)
#結果
0 1 2
0 1 2 3
1 4 5 6
Step3 : MySQLへの挿入
データフレーム型のデータをMySQLへ挿入するためにsqlalchemyを使用します。sqlalchemyのcreate _engineメソッドで接続情報を定義します。user,passwordやhost,databaseについては接続するMySQL側の適切な値を書きます。
from sqlalchemy import create_engine
#engine = create_engine('mysql://<user>:<password>@<host>/<database>?charset=utf8')
engine = create_engine('mysql://user:password@localhost/test_db?charset=utf8')
#df.to_sql(<table_name>,con=engine, if_exists='append', index=False)
df.to_sql('testdb.mysq_table',con=engine, if_exists='append', index=False)
#結果
col1 col2 col3
0 1 2 3
1 4 5 6
無事に挿入できました。
補足
sqlalchemyを使用し、to_sqlで挿入する方法ですが、もしデータベース側にテーブルが存在していない場合は、テーブルを自動作成した上で挿入してくれます。これは非常に便利です。