PostgreSQL + Zope + psycopg のファイルライブラリ(の作りかけ)
RDBMS にデータを貯めこむアプリケーションを作るときに、(私が)いつも悩むのは、バイナリデータの取り扱いです。
一応、SQL 標準では BLOB という型が用意してあるのですが、そのデータの入出力は、組み込みの関数か、OCI のような低レベルのインターフェースを使うしかないので、RDBMS毎に、さらには、RDBMSとのインターフェース言語(Zope なら ZSQLMethodや Python)毎に、そのやり方を調べたりしないといけません。
逆に、バイナリデータの取り扱いさえクリアすれば、その他は、RDBMS間の差は少ないので(さらに、私の場合はそれ程高度な使い方をしないので)、その RDBMS+言語インターフェースの組み合わせは、マスターしたも同然と感じています。
というわけで、PostgreSQL + Zope でバイナリデータを扱うサンプルを作りました。 Zope に標準でついている File Library を意識してつくり始めましたが、途中で挫折してしまったので、作りかけになってしまいました。しかし、バイナリファイルの PostgreSQL への入出力のサンプルという目的は達しています。
psycopg は、Zopeの DA(Zpsycopg)と pythonのモジュール(psycopg)の両方をインストールします。
PostgreSQLに、ユーザー 'pgfilelib' を作成し、そのユーザーで、データーベース 'pgfilelib' を作成します。
createtable.py を実行します。
Extension ディレクトリに、PgFileLib.py をコピーします。
PgFileLib.zexp を Zope にインポートします
バイナリデータの INSERTのために External Method を使っています。逆にいうと、バイナリデータの SELECT (表示)だけであれば、External Method は必要ないということになります。
PostgreSQL の BYTEA 型のフィールドに値を入れれば、ZSQL Method でそのままのデータが Python の変数に入ってきます。
では、なぜ INSERTの処理のために、External Method を使う必要があったかというと、主に
のためです。