psycopg

 psycopg は、PostgreSQL の Database Adapter であるとともに、 DBAPI-2.0 に適合した モジュールでもあります。

インストール

 以下にインストール手順を示しますが、

  1. /usr/local/bin/python2.1 に Pythonのバイナリがインストールされている
  2. /usr/local/lib/python2.1 に Pythonの標準ライブラリがインストールされている
  3. /usr/local/zope に zopeがインストールされている
  4. /usr/local/pgsql に PostgreSQLがインストールされている

ことを前提として説明しますので、ディレクトリ名については適宜読み替えてください。

1.PostgreSQLのインストール

 後で、コンパイルのためにヘッダーファイルを参照するので、通常の PostgreSQLのインストール手順のほかに

# make install-all-headers

を実行します。

2.mxDateTimeのインストール

 http://www.egenix.com/files/python/eGenix-mx-Extensions.html から、egenix-mx-base-x.y.z* というファイル名の中で、最新のアーカイブのいずれかをダウンロードしてきて、

# /usr/local/bin/python2.1 setup.py install

でインストールします。
 私がダウンロードしようとしたときには、最新は 2.0.4 で、何故か、egenix-mx-base-2.0.4.tar.gz はアーカイブを解くことができなかった(gzip フォーマットでないと言われてしまう)ので egenix-mx-base-2.0.4.zip というファイルを取ってきて、インストールしました。

3.pyscopg のインストール

http://www.zope.org/Members/fog/psycopg から最新のアーカイブをダウンロードします。私が試みたときは psycopg-1.0.14.tar.gz が最新でした。

# ./configure --with-python=/usr/local/bin/python2.1 
    --with-zope=/usr/local/zope 
    --with-postgres-includes=/usr/local/pgsql/include 
    --with-postgres-libraries=/usr/local/pgsql/lib 
    --with-mxdatetime-includes=/usr/local/lib/python2.1/site-packages/mx/DateTime/mxDateTime

(以上実際は1行で入力)のあと

# make
# make install
# make install-zope

を実行します。

 

Cygwinで使う場合

 私がダウンロードしたバージョン 1.0.14 を、Cygwin環境で動かすためには、パッチが必要でした。 psycopg-1.0.14-cygwin.diff を当ててから、make をして下さい。

追加情報 2003/3/14
http://initd.org/Software/psycopg に 最新 stable として 1.1.2 がリリースされていますが、この中に、上記 patchが取り込まれたようです。
よって、1.1.2以降であれば、上記パッチを当てる必要はありません。

 

文字コードについて

 ZPsycopgDA も、psql コマンドと同様、環境変数 PGCLIENTENCODING を参照してしまいます。

そのため、例えば、PGCLIENTENCODING=SJIS と設定したコンソールから Zope の start スクリプトを起動すると、Zope内での検索結果が Shift_JIS で出力されてしまします。

私の Cygwin環境では .bashrc には 

export PGCLIENTENCODING=SJIS

と入れておき Zope の start スクリプトでは

fi
PGCLIENTENCODING=EUC_JP
exec /usr/local/bin/python2.1 $cwd/z2.py -D "$@"

のように、1行加えています。

 

基本的な使い方

ZPsycopgDA の Connection Stringには 'dbname=foo user=bar password=secret' という感じで入れます。

pg_hba.conf の METHOD が trust になっている場合は、password=secret の部分は必要ありません。

パスワードによる認証を行いたい場合は、MD5 しか使えないようですので、 pg_hba.conf の METHODを 'md5' にします。

Python の DB モジュールとして psycopg を使いたい場合、psycopg のソースアーカイブの doc/examples/*.py にサンプルがありますので、それを参考にしてみて下さい。

 


Zope メモ