Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Pandas Python

Pythonでcsvを読み込んでデータベース化する方法~pandasのto_sqlを用いたテーブルへのINSERT~

投稿日:2020年11月27日 更新日:

<目次>

(1) Pythonでcsvを読み込んでデータベース化する方法
 (1-1) 構文(to_sql)
 (1-2) 構文(to_sql)の引数
 (1-3) サンプルプログラム

(1) Pythonでcsvを読み込んでデータベース化する方法

(1-1) 構文(to_sql)

(構文)

import pandas as pd
df = pd.read_csv('[csvのパス]',encoding = 'utf-8')
df.to_sql(con=[create_engineの結果],name='[テーブル名]',schema='[スキーマ名]')

①1行目でpandasライブラリを「pd」という名前(任意)でインポートしています。
②2行目でpandasのread_csvメソッドでcsvを読み込みます(⇒read_csvの詳細はコチラでご紹介
③3行目でto_sqlでread_csvの結果を指定したテーブルにINSERTします。引数については次の節でご紹介します。

目次にもどる

(1-2) 構文(to_sql)の引数

構文で出たto_sqlの引数についてご紹介します。
(表)to_sql引数

オプション 説明
con=[エンジン] sqlalchemyパッケージ(PythonのObject Relational Mapper)のcreate_engineファンクションの実行結果(エンジン)を指定します。エンジンはDB接続の起点となるオブジェクトです。
name=[テーブル名] INSERTを行う対象のテーブルを文字列か変数で指定します。
schema=[スキーマ名] INSERTを行う対象のスキーマを文字列か変数で指定します。
index=[True/False] データフレームが保持するインデックス情報を、INSERT時に1つのカラムとして追加するかどうか。指定なしの場合は「True」の扱いになります。
if_exists=[‘fail’/’replace’/’append’] もしテーブルが存在した場合の対応を記載します。
‘fail’⇒エラーを挙げる
‘replace’⇒既存テーブルをDROPして、新規に作成
‘append’⇒新しい値(差分)のみをINSERT
dtype=[dictionaryまたはスカラー] カラムのデータ型を指定します。引数はdictionary(キーと値のセットを持つ配列の一種)またはスカラーで指定します(スカラー指定の場合は全カラムに適用)

目次にもどる

(1-3) サンプルプログラム

(サンプルプログラム)

import os
import cx_Oracle
import pandas as pd

def main():

    ##### (1)csvの読み込み
    # 第一引数=csvファイルのパス
    # 第二引数=encoding=エンコーディング方式
    url = r'C:\Users\Rainbow\Desktop\RP-IT0183_Test\match_stats_2017_unindexed_csv_mini.csv'
    df = pd.read_csv(url,encoding = 'utf-8')

    ##### (2)DB接続のためのエンジン生成
    # 引数 max_identifier_length : テーブルの名前の限界値を指定。
    # (バージョン12.1以下のDBだと30が限界なので30で指定)
    from sqlalchemy import create_engine
    engine = create_engine('oracle://[SchemaName]:[Password]@[Host/IPaddress]:[port]/[SID]',encoding='utf-8',max_identifier_length=30)

    ##### (3)DBへのINSERT準備
    # テーブル名を定義
    tbl_name='match_stats_2017'
    #カラム名も略語に置き換え
    df.columns = [col.replace('winner','win') for col in df.columns]
    df.columns = [col.replace('loser','lose') for col in df.columns]
    df.columns = [col.replace('serves','sv') for col in df.columns]

    ##### (4)DBへのINSERT処理
    # 引数con : engineを指定します
    # 引数name : テーブル名を指定します
    # 引数schema : スキーマ名を指定します
    df.to_sql(con=engine,name=tbl_name,schema='TENNISDBUSR2')

if __name__ == '__main__':
    main()

(サンプルプログラム実行イメージ)
①DBの初期状態チェック
現在はスキーマに対してテーブルが存在しない状態です(Before)。
(図131)


②Pythonプログラムの実行
上記のPythonのサンプルプログラムを実行します。正常に完了すればテーブルが生成されます。
(図132)


③DBの状態チェック
プログラム実行完了後のDBを見ると、Pythonで作成した「match_stats_2017」というテーブルが作成されている事が確認できます。またSELECTするとレコードも挿入されている事が確認できます。

(操作動画)
上記の流れを操作した動画もご紹介します。
①DB初期状態チェック
②INSERT予定のcsvファイルのチェック
③Pythonプログラムの実行
④DBの状態チェック
(動画)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Pandas, Python

執筆者:


comment

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

関連記事

Pythonのdatapackage学習中に遭遇したエラー「StopIteration」と「AttributeError」の対応

(0)目次&概説 (1) 記事の目的 (2) エラー1:AttributeError: ‘generator’ object has no attribute ‘n …

Azure FunctionsでPythonのライブラリを追加する方法(依存関係解決)

  <目次> (1) Azure FunctionsでPythonのライブラリを追加する方法(依存関係解決)  (1-1) requirement.txtの設定手順  (1-2) 補足事項 …

PythonのSQLAlchemyで「Identifier ‘XXX’ exceeds maximum length of 30 characters」エラーや「DtypeWarning: Columns (X) have mixed types.」警告が出た時の対処について

(0)目次&概説 (1) エラー1:sqlalchemy.exc.ArgumentError  (1-1) 発生状況・エラーメッセージ   (1-1-1) エラーメッセージ   (1-1-2) エラー …

PythonのdatapackageとSQLAlchemy、SQLiteを使ってcsvデータをSELECTする

(0)目次&概説 (1) 今回の目的  (1-1) 目的  (1-2) 前提条件 (2) 実施手順  (2-0) 事前作業  (2-1) データ(csv)のロード  (2-2) エンジンの作成  (2 …

Pythonパッケージインストール(pip install)をオフラインで行う方法

<目次> (1) Pythonパッケージインストール(pip install)をオフラインで行う方法  (1-1) オフラインインストールとは? (2) オフラインインストールの手順(要Cコンパイルの …

  • English (United States)
  • 日本語
Top