Python

Python dataframeからMySQLにinsertする

投稿日:

目的

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で挿入する方法ですが、もしデータベース側にテーブルが存在していない場合は、テーブルを自動作成した上で挿入してくれます。これは非常に便利です。

-Python
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Python】pandas dateframeで日時を日付と時間に分ける

Contents1 元データ2 日付と時刻にばらすコード 元データ このようなデータフレームがあり、日付と時刻にばらしたい場合の話。 import pandas as pd import dateti …

Pythonからデータベース接続(PostgreSQL,Oracle,MySQL)

Contents1 目的2 PostgreSQLの場合3 MySQLの場合4 Oracleの場合 目的 pythonからデータベースに接続するコードをすぐ忘れるので、書き留める PostgreSQLの …

【Python】requestで403エラーが出るときの原因

Contents1 概要2 ID/PASS間違い3 URL間違い4 ADドメインの外からアクセス5 プロキシがうまく設定できていない6 プロキシが邪魔してくる7 まとめ8 参考とさせて頂いたサイト 概 …

【Python】PaSoRiでカードを読み取ったら音を鳴らす

Contents1 目的2 音源3 音源再生用ライブラリ(pydub)4 コード5 結論 目的 前回、PaSoRiの上にICカードを置いた状態からカードの中の情報を読み取る、というものをPythonで …

【Python】Windows10にpytorchをpipでインストールする

Contents1 概要2 環境3 Step1 : Pytorchのpipコマンドの入手4 Step2 : pipインストール5 Step3 : importして確認6 おまけ:アンインストールすると …

言語切り替え

カテゴリー