1

Postgres NOTIFYは、文字列リテラルのみをサポートします (バイナリ データはサポートしません)。次の方法で、ピクルされたオブジェクトでそれを使用することができました。

message = cPickle.dumps(objectFoo)
cursor = connection.cursor() # this is psycopg2 connection
cursor.execute("NOTIFY channelFoo, %s", [message])

ただし、エンコードされたオブジェクトにトリッキーなバイトが含まれている場合 (たとえば、'\x80' 文字列)。からエラーが返されexecute()ます:

psycopg2.DataError: "UTF8" をエンコードするための無効なバイト シーケンス: 0x80

これを回避する方法はありますか?オブジェクトが保持するデータに関係なく、ピクルされたオブジェクトをPostgres文字列に確実にシリアル化できるようにするものはありますか?

4

1 に答える 1

5

Pythonピクルスは、バイトのバイナリシーケンスです。文字列にピクルスを入れる必要がある場合は、それをエンコードします。一般的な手法には、base64またはuuencodeの使用が含まれます。次に、受信側でデコードします。

于 2013-03-06T23:00:12.280 に答える