PythonでSQLiteを使ってみる

2011/10/07

Pythonを使ってSQLiteでデータベースを作ってみる、といった簡単な実験をしてみる。何をやるかと言うと、ネットから適当なCSVファイルをダウンロードしておいて、プログラムでCSVファイルを読みこんで、SQLiteのDBファイルにインサートする。

実験に使ったファイル
郵便事業株式会社のサイトに掲載されていた事業所の個別郵便番号(CSV形式)を使った。約2万1千件のレコードなので実験するには便利かもしれない。なお、「大口事業所個別番号番号データについては郵便事業株式会社は著作権を主張しません。自由に配布していただいて結構です。郵便事業株式会社への許諾も必要ありません。」ということなので使用しても問題なさそうだ。
TkSQLite
GUIベースのSQLiteのデータベースマネージャ。これがあると、PythonでちゃんとDBにインサートできたかどうか、簡単にわかるので便利。sqlの実行もできる。TkSQLiteのダウンロードはここから。

プログラム

#coding:utf8

import sys
import csv
import sqlite3

con = sqlite3.connect('jigyo.db')
cur = con.cursor()

cur.execute("""create table campany (
                id integer,
                name text,
                yomi text,
                adrs1 text,
                adrs2 text,
                adrs3 text,
                adrs4 text )""")


fp=open("JIGYOSYO.CSV")

office = csv.reader(fp)

i = 0
for row in office:
    i = i+1
    #print row[2]
    t = (i, row[2].decode('cp932'), row[1].decode('cp932'),
            row[3].decode('cp932'), row[4].decode('cp932'),
            row[5].decode('cp932'), row[6].decode('cp932') )
    cur.execute("insert into campany values(?,?,?,?,?,?,?)",t)

con.commit()

cur.close()

ちょっとしたメモ

  • ダウンロードしたCSVファイル JIGYOSYO.CSV
  • これから作るDBファイル jigyo.db
  • CSVファイルのフォーマット
  • 0 大口事業所の所在地のJISコード(5バイト)
    1 大口事業所名(カナ)(100バイト)
    2 大口事業所名(漢字)(160バイト)
    3 都道府県名(漢字)(8バイト)
    4 市区町村名(漢字)(24バイト)
    5 町域名(漢字)(24バイト)
    6 小字名、丁目、番地等(漢字)(124バイト)
    7 大口事業所個別番号(7バイト)
    8 旧郵便番号(5バイト)
    9 取扱支店名(漢字)(40バイト)
    10 個別番号の種別の表示(1バイト)
  • text型をinsertするときはUnicodeに変換してから実行する
  • 一回ごとにinsertしてcommitすると時間がかかるので、すべてinsertしてからcommitすると良い

TkSQLiteで作ったテーブルをみる

Python,SQLiteCSV,Python,SQLIte

Posted by skw