7

文字列を gzip してから、psycopg2byteaを使用して列に書き込もうとしています。

テーブル:

CREATE TABLE test
(
  data bytea
)

入れる:

import psycopg2

data = "some string".encode("zlib") # 'x\x9c+\xce\xcfMU(.)\xca\xccK\x07\x00\x1ak\x04l'

conn = psycopg2.connect("my parameters")
cur = conn.cursor()
cur.execute("INSERT INTO public.test VALUES (%s)", (data,))

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0x9c

これはライブラリの問題ですか?何らかの方法でエンコーディングを変更する必要がありますか? どんな助けでも大歓迎です。

4

1 に答える 1

19

バイナリ データをデータベースに挿入する場合は、psycopg2.Binary() ラッパーを使用する必要があります。あなたが行ったように文字列を使用すると、データがテキストとして扱われ、エンコーディングの問題のために拒否されるか、受け入れられても再度読み取ろうとすると壊れます。

最後の実行呼び出しを次のように置き換えてみてください。

cur.execute("INSERT INTO public.test VALUES (%s)", (psycopg2.Binary(data),))
于 2012-10-25T04:05:15.317 に答える