LoginSignup
24

More than 5 years have passed since last update.

CSVデータをDBに入れてみる

Posted at

この記事について

拾ってきたCSVデータをDBに保存してみます。
使用するデータは気象庁で公開されている過去一年分のモノを使用します。

関連記事

python3でDBにデータを保存する(with PostgreSQL and psycopg2)

データ用意

今回使用する気象庁のデータを貰ってきましょう。
ココのページを開いてCSVファイルをダウンロードしてください。
私は東京・日別・日平均気温・過去一年間のデータを取得してきました。

とりあえずCSVを開いてみるとヘッダー行が5行ほどあります。
image.png
邪魔なので削除しました。

保存用のDBを用意

今回はCSVのデータをDBに保存するまでを行いますので、テーブルも用意しておきます。
テスト用のモノなので簡単なものでよいでしょう。

create_table.sql
CREATE TABLE KIONDATA(
    HIDUKE DATE,
    KION numeric(3,1)
)

ソースコード

では、CSVからデータを取り出して、それをDBに保存していきます。
試しに一行ずつ取り出して出力してみましょう。

getcsvdata.py
import csv
with open('csv/data.csv', newline='') as csvfile:
    read = csv.reader(csvfile)
    for row in read:
        print(row)
Result
['2018/9/14', '21.9', '8', '1']
['2018/9/15', '20.5', '8', '1']
['2018/9/16', '23.1', '8', '1']
.
.
.
(以下略)

という感じに出力できたと思います。
あとは簡単ですね、print(row)の部分をINSERT文に変更してあげるだけでDBに保存することができます。

過去の記事を参考にしていただければ実装できるかとは思いますが、一応私が書いたものを載せておきます。

getcsvdata.py
import csv
import psycopg2

path = "localhost"
port = "5432"
dbname = "test"
user = "postgres"
password = "password"

conText = "host={} port={} dbname={} user={} password={}"
conText = conText.format(path,port,dbname,user,password)
connection = psycopg2.connect(conText)
connection.get_backend_pid()
cur = connection.cursor()

with open('csv/data.csv', newline='') as csvfile:
    read = csv.reader(csvfile)
    for row in read:
        sql = "INSERT INTO KIONDATA VALUES('{}',{})"
        sql = sql.format(str(row[0]).replace("/","-"),row[1])
        cur.execute(sql)
        connection.commit()

cur.close()
connection.close()

formatの部分でreplaceを使用して置換していますが、CSVデータが「/」で区切られているのに対してPostgreSQL側が「-」で区切っていたためです。
前半部分でヘッダー部分を削除しましたが、実はnext(read)と記述すれば一行飛ばすことができます。
ですがさすがに

getcsvdata.py
next(read)
next(read)
next(read)
next(read)

と書くのはダサすぎたので削除いたしました。

これにて終了です。
ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24