ピクルス化されたオブジェクトを PostgreSQL データベースに保存しています。当初、これは悪い考えだと思っていましたが、めったにアクセスされず、私が学んだことから、TOAST はリレーショナル データベースに大きな BLOB を保存する際のパフォーマンスへの影響を最小限に抑えているようです。
あなたINSERT
または列UPDATE
のbytea
ときは簡単です。a を作成し、それをカーソル オブジェクトpsycopg2.Binary
の呼び出しに渡すだけです。execute
私の場合は漬け物です。
SELECT
a を実行して列を取得するたび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 を使用しています。