PgFileLib

PostgreSQL + Zope + psycopg のファイルライブラリ(の作りかけ)

ことの始まり

 RDBMS にデータを貯めこむアプリケーションを作るときに、(私が)いつも悩むのは、バイナリデータの取り扱いです。

 一応、SQL 標準では BLOB という型が用意してあるのですが、そのデータの入出力は、組み込みの関数か、OCI のような低レベルのインターフェースを使うしかないので、RDBMS毎に、さらには、RDBMSとのインターフェース言語(Zope なら ZSQLMethodや Python)毎に、そのやり方を調べたりしないといけません。

 逆に、バイナリデータの取り扱いさえクリアすれば、その他は、RDBMS間の差は少ないので(さらに、私の場合はそれ程高度な使い方をしないので)、その RDBMS+言語インターフェースの組み合わせは、マスターしたも同然と感じています。

 というわけで、PostgreSQL + Zope でバイナリデータを扱うサンプルを作りました。 Zope に標準でついている File Library を意識してつくり始めましたが、途中で挫折してしまったので、作りかけになってしまいました。しかし、バイナリファイルの PostgreSQL への入出力のサンプルという目的は達しています。

インストール

1.PostgreSQL および psycopg のインストール

 psycopg は、Zopeの DA(Zpsycopg)と pythonのモジュール(psycopg)の両方をインストールします。

2.データベースの作成

 PostgreSQLに、ユーザー 'pgfilelib' を作成し、そのユーザーで、データーベース 'pgfilelib' を作成します。

3.テーブルの作成

 createtable.py を実行します。

4.External Methodの配置

Extension ディレクトリに、PgFileLib.py をコピーします。

5.ファイルのインポート

PgFileLib.zexp を Zope にインポートします

 

サンプルのポイント

 バイナリデータの INSERTのために External Method を使っています。逆にいうと、バイナリデータの SELECT (表示)だけであれば、External Method は必要ないということになります。

 PostgreSQL の BYTEA 型のフィールドに値を入れれば、ZSQL Method でそのままのデータが Python の変数に入ってきます。

 では、なぜ INSERTの処理のために、External Method を使う必要があったかというと、主に

のためです。


Zope メモ