2

Python を使用して SQL Server (pypyodbc) から値を読み取り、それらを PostgreSQL (psycopg2) に挿入しています。

エラーの原因となっている NAME フィールドの値が検出されました。

Montaño

値は私の MSSQL データベースに問題なく存在し (SQL_Latin1_General_CP1_CI_AS エンコーディング)、PGAdmin と挿入ステートメントを使用して、私の PostgreSQL データベースに問題なく (UTF8) 挿入できます。

問題は、python を使用して選択すると、値が次のように変換されることです。

Monta\xf1o 

(xf1 は 'チルダ付きのラテン小文字 n' の ASCII です)

...PostgreSQL に挿入しようとすると、次のエラーがスローされます。

invalid byte sequence for encoding "UTF8": 0xf1 0x6f 0x20 0x20

上記のエラーの原因となっている文字列への入力文字列の変換を回避する方法はありますか?

4

1 に答える 1

1

Python_2 では、基本的な文字列から型への変換を実際に実行しunicodeたいと考えています。したがって、コードが次のようになっている場合

sql = """\
SELECT NAME FROM dbo.latin1test WHERE ID=1
"""
mssql_crsr.execute(sql)
row = mssql_crsr.fetchone()
name = row[0]

latin1次に、 (SQL Server から取得した)基本文字列を型に変換してunicodeから、PostgreSQL INSERT のパラメーターとして使用することをお勧めします。

name = row[0]

あなたがするだろう

name = unicode(row[0], 'latin1')
于 2016-08-18T00:36:53.613 に答える