[PR]テレビ番組表
今夜の番組チェック


PostgreSQLのPythonインターフェース・pyPgSQL

 PostgreSQLへのデータベース・アクセスをPython言語で行うためのモジュールは、 多数のグループが競い合うように開発されており、 一見、どれを使おうか迷ってしまいます。 が、どれもPython DB-APIに(程度の差はあれおおむね)準拠した作りになっているので、 どれか1つで始めてしまえば、何か事情があっても後で乗り換えることが簡単にできます。 まずは、どれかで始めてしまいましょう! 今度は、Python本体に標準で付属することから 「標準」とされるPyGreSQL以外のモジュールとして、 pyPgSQLをご紹介します。 これはオープンソースで開発されているモジュールで、 中心的な開発者 Gerhard HäringさんがWindowsプラットフォームメインの開発者であり、 PostgreSQLモジュールの中でも最もWindows環境に適応していると思われます。

Windowsへのインストール
 次の環境で試しました。
プラットフォームpyPgSQLPython
MS-Windows XP Home Edition2.12.1

  1. Python処理系がインストール済みであることを確認します。 pyPgSQLのWindows用バイナリ配布はまだ2.1用のみで、2.2用はありません。
  2. Pythonの拡張モジュール「mxDateTime」をインストールします。 mxDateTimeはPythonで日付・時刻データを扱う機能を持つ拡張として広く知られるフリーウェアで、 こちらから入手できます。 インストールは簡単なので省略します。
  3. pyPgSQLのホームページから、 「pyPgSQL-2.1-win32.py-2.1.exe」をダウンロードしてきます。
  4. これをダブルクリックするなどするとPythonのインストーラが起動するので、 その指示に従えば全自動でインストールが行われます。

コーディング例

# 2002/08/03
import pyPgSQL
import pyPgSQL.PgSQL

def es(s):
  u = unicode(s, "japanese.euc_jp")
  return u.encode("japanese.shift_jis")

con = pyPgSQL.PgSQL.connect(database="udb", host="192.168.1.67", port=5432,
                            user="urano", password="urano399")
# カーソルの作成
cur = con.cursor()
# SQL文で問い合わせを実行します。
s = "SELECT KANJI_NAME, MAIL_ADDRESS FROM USERS"
cur.execute(s)

# 結果を1行ずつ取得
r = cur.fetchone()
while r != None:
  print "%-10s | %-40s" % (es(r[0]), r[1])
  r = cur.fetchone()
# カーソルを閉じます。
cur.close()

# closeメソッドでデータベース接続を終了します。
con.close()
# end.

コーディング例です。おおむね、DB API 2.0に沿って書くことができますが、 注意点を2点ほど…まず、 connectメソッドの引数ですが、 これは例のようにhost、portなどの名前つきパラメータで指定します。 「×dbname→○database」、「×passwd→○password」 などが、他のモジュールと互換性のない名前なので気をつける必要がありますね。 また、日本語の扱いですが、pyPgSQLではDB内部のエンコーディングでそのまま返してくるので、 適切に(Windowsの場合はシフトJISに)変換してやる必要があります。 これは例のように、「JapaneseCodecs」を使うのが最も簡単な方法でしょう。

セクションのサブメニューに戻る
(first uploaded 2002/08/04 last updated (not ever))