Python プログラミング

Python3でcsvから、postgresSQLへinsert処理

利用環境

Python 3.7.2
Visual Studio Code 1.39.1
CentOS Linux release 7.7.1908 (Core)
PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit

利用データ

上場企業一覧のCSVを
カブサポさんより配布されているものを入手し、利用する。
https://kabusapo.com/stock-data/stock-list/

テーブルの準備

CREATE TABLE t_brand
(brand_code    TEXT    NOT NULL,
brand_name   TEXT       NOT NULL,
market_name   TEXT       ,
Industry_class   TEXT       ,
num_ob_unit   decimal       ,
flag_225   boolean       ,
PRIMARY KEY (brand_code));

ソースコード

import csv
import pprint
import psycopg2

#PostGresSQLへ接続
conn = psycopg2.connect("host=192.168.10.8 port=5432 dbname=mei_edinet_db user=mayser")
cur = conn.cursor()

#辞書として読み込み
with open('stocklist.csv', encoding="utf-8-sig") as f:
    reader = csv.DictReader(f)
    for row in reader:
        #rowは、dictで取り出される
        print(type(row))
        #キーでdictにアクセス
        print(row['銘柄コード'])
        print(row['銘柄名'])
        print(row['市場名'])
        print(row['業種分類'])
        print(row['単元株数'])
        print(row['日経225採用銘柄'])

        #日経225を、Boolean型に変更。(もっとスマートな方法がありそうだが。。。)
        if (row['日経225採用銘柄'] == 1):
            flg_225 = True
        else:
            flg_225 = False

        #単元は、"単元制度なし"という文字を含む為、判定ロジック
        if row['単元株数'].isdecimal() :
            num_tangen = row['単元株数']
        else:
            num_tangen = 0

        #ここから、postgresSQLへinsert
        cur.execute("INSERT INTO t_brand (brand_code, brand_name, market_name, industry_class, num_ob_unit, flag_225) \
            VALUES (%s, %s, %s, %s, %s, %s)",  \
                (row['銘柄コード'], row['銘柄名'], row['市場名'],row['業種分類'],num_tangen,flg_225))         

# コミット
conn.commit()

#切断

結果

スクリーンショット 2019-11-02 14.02.06.png

GitHub

GitHub

-Python, プログラミング
-,