2017-10-23 21 views
0

testという名前のデータベースが1列しかなく、some_dataというcharacter varying列のデータベースを持っています。データベースには照合順序がde_DE.utf8のエンコードUTF8があります。 このデータベースへの接続がUnicodeのタイプが同じように登録された後に確立されている:私はPsycopg2 + Python 2 cursor.mogrifyでUnicodeデコードエラーが発生する

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) 

と私は

cur_test = C_test.cursor() 

を接続

C_test = psycopg.connect(myhost [...]) 

を確立し、接続上のカーソルをオープン私のデータをユニコード文字列としてtestに挿入してください。

cur_prod.execute("INSERT INTO test some_data VALUES ("+u'ö'+");") 

テーブルには、UTF8の文字列としてユニコードu'öが格納されていると予想されます。"\xc3\xb6"

ユニコード拡張はユニコードを元に戻すことを保証し、実際に値を選択して印刷すると、'\xf6'というユニコードの'ö'が得られます。私はのように、カーソルの上にmogrifyを使用する場合:

cur_test.mogrify(u'%s',(u'ö',)) 

私はUnicodeDecodeエラーが原因で挿入することはできません"'\xc3\xb6'"のような文字列を取得します。長い話が短いです:私は、登録されているUnicode拡張子と一緒にMogrifyを使用できますか、または私は文字通り連結してもらう必要はありませんか?

答えて

0

はい、ユニコードアダプタを登録すると、mogrifyがそれを使用します。

+0

私の場合はそうではありません。理由は何ですか? – Dschoni

関連する問題