2009年4月8日水曜日

Python で MySQL を操作 – MySQL-python

1. MySQL を Python で操作するためのライブラリ

Python で MySQL のデータを操作したい。

MySQL - PythonInfo Wiki によると、以下の 3 つのライブラリが挙げられていた。

とりあえず、一番上を使ってみよう。

 

2. MySQL for Python のダウンロードとインストール

をダウンロードしてインストール。

090407-003

\Lib\site-packages\ にインストールされる。

 

3. Python Database API Specification

MySQLdb User's Guide によると、

If you want to write applications which are portable across databases, use MySQLdb, and avoid using this module directly. _mysql provides an interface which mostly implements the MySQL C API.

_mysqlMySQLdb の二つのインターフェイスがある。データベース間で、統一したインターフェイスを持つことを目的にされた MySQLdb は、

を実装している。

Some examples を参考にしながら試すことにした。

 

4. 例

郵便番号のデータ を MySQL に登録してみる。

CSV ファイルのデータ形式は、郵便番号データファイルの形式等 を参考にした。このデータから、以下の項目を抽出する。

  • 郵便番号(7桁)
  • 都道府県名
  • 市区町村名
  • 町域名
方法

まずは、MySQL Administrator を使って、以下のような yuubinbangou テーブルを作成。

090407-004

コードを以下に示す。

  1. 最初にテーブルのデータを削除し、
  2. CSV ファイルから 100 件分のデータを登録した後、
  3. 登録したデータ 10 件分を表示するようにした。

(郵便番号のデータは C: 直下に配置。)

import MySQLdb, codecs

# DB に接続
db = MySQLdb.connect(user="test", passwd="test", db="test", charset="utf8")
# カーソルの取得
c = db.cursor()

# DELETE
c.execute("delete from yuubinbangou")

# INSERT (最初から 100 件分を登録)
FILE_PATH = ur"C:\KEN_ALL.CSV"
f = codecs.open(FILE_PATH, "r", "shift_jis")
for i in range(0,100):
    row = [x[1:-1] for x in f.readline().split(',')]
    c.execute(u"""INSERT INTO yuubinbangou(bangou, ken, si, tyou)
                VALUES ('%s', '%s', '%s', '%s')"""
                % (row[2], row[6], row[7], row[8]))
f.close()

# COMMIT
db.commit()

# SELECT
c.execute("SELECT * FROM yuubinbangou")
# 最初から 10 件を表示
it = iter(c)
for i in range(0,10):
    for col in it.next():
        print col,
    print

 

コードについて

データベースに接続する connect メソッドの引数に、

charset="utf8"

を追加しないと、UnicodeEncodeError が投げられた。

その他、以下を参照。

MySQL で文字化け - 後から文字コードを変えるとき」のようなミスをしないように。 (+_+)