ピクルス化されたオブジェクトを PostgreSQL データベースに保存しています。当初、これは悪い考えだと思っていましたが、めったにアクセスされず、私が学んだことから、TOAST はリレーショナル データベースに大きな BLOB を保存する際のパフォーマンスへの影響を最小限に抑えているようです。
あなたINSERTまたは列UPDATEのbyteaときは簡単です。a を作成し、それをカーソル オブジェクトpsycopg2.Binaryの呼び出しに渡すだけです。execute私の場合は漬け物です。
SELECTa を実行して列を取得するたびbyteaに、pythonbufferオブジェクトが作成されます。pickle.loadsつまり、単に aまたは aを実行することはできませんpickle.load。私が思いついた最高のものは使用することですStringIO
import psycopg2
import cPickle as pickle
import cStringIO as StringIO
conn = psycopg2.connect(user='postgres',database='postgres')
cur = conn.cursor()
cur.execute('Select %s', (psycopg2.Binary(pickle.dumps({'foo':'bar'},-1)), ))
result, = cur.fetchone()
cur.close()
conn.rollback()
result = StringIO.StringIO(result)
print pickle.load(result)
これの費用はいくらですか?StringIOオブジェクトは元のオブジェクトの浅いコピーですかbuffer? これを行うより実用的な方法はありますか?
問題があれば、Stackless 2.7.5 を使用しています。