csvファイルのデータからsqlite3データベースへうつす、内容の表示
Webサーバ上でデータベースを作ろうと思ったので、まずSQL文の練習をすることにしました。
csvファイルでデータをもらった後、軽量なデータベースであるsqlite3にデータを移しました。
python組み込みのsqlite3モジュールを使用しました。
データの用意
まずサンプルとしてcsvファイルで受注表を用意しました。
jyuchuhyo.csv
受注番号,顧客コード,商品コード,受注個数,納品日 100011,001,1002,30,20110501 100012,002,1001,20,20110501 100013,003,1003,10,20110501 100014,001,1003,15,20110502 100015,003,1101,15,20110503
jyuchuhyo.py
# -*- coding: utf-8 -*- import csv import sqlite3 # DBを表すConnectionオブジェクトをRAM上に作成して、DBに接続する。 conn = sqlite3.connect(':memory:') # DB上の処理対象の行を指し示すためのCursorオブジェクトを作成する。 cur = conn.cursor() # 受注表という名前のtableを作成する。 cur.execute("""CREATE TABLE 受注表 (受注番号 CHAR(6) NOT NULL, 顧客コード CHAR(4) NOT NULL, 商品コード CHAR(5) NOT NULL, 受注個数 INTEGER NOT NULL, 納品日 CHAR(8) NOT NULL);""") # 受注表(csv)を開く。 with open('./sqlite/jyuchuhyo.csv', 'rb') as f: b = csv.reader(f) header = next(b) for t in b: # tableに各行のデータを挿入する。 cur.execute('INSERT INTO 受注表 VALUES (?,?,?,?,?);', t) # 以降、sqlite3のDBからデータの読み出し例 # 受注個数が20より小さいものを3項目(列)表示 cur.execute('SELECT 受注番号, 商品コード, 納品日 FROM 受注表 WHERE 受注個数 < 20;') for row in cur: # 書き方① for文を使う。 print row # 受注表の内容を全部表示 cur.execute('SELECT * FROM 受注表;') print cur.fetchall() # 書き方② fetchall()を使う。リストを返す。 # 受注表のうち納品日を重複を排除して表示 cur.execute('SELECT DISTINCT 納品日 FROM 受注表;') print cur.fetchall() # DBの変更を保存する。 conn.commit() # データベースとの接続を閉じる。 conn.close()