1

SQLAlchemy を使用してデータベース PostgreSQL 9.2 を作成して接続する必要があります。これまでのところ、UTF-8 で完全なデータベースを作成できましたが、ASCII 以外の文字を入れるのに問題があります。これは私がデータベースに接続する方法です:

url = URL(drivername=s'postgresql', username='uname', password='pwd', host='localhost', port='5432', database='postgres')
self.engine = create_engine(url)

次に、新しいデータベースを作成し、それに切り替えて、入力を開始します。すべて問題ありません。私はこれを得る:

entercursor.execute(statement, parameters)
sqlalchemy.exc.DataError: (DataError) "UTF8" をエンコードするための無効なバイト シーケンス: 0xec2d43
'INSERT INTO Province (codice_regione, codice, tc_provincia_id, nome, sigla) VALUES (%(codice_regione)s, %(codice)s, %(tc_provincia_id)s, %(nome)s, %(sigla)s) RETURNING Province.id' {'nome': 'Forl\xec-Cesena', 'codice': 40, 'codice_regione ': 8、'tc_provincia_id': 34、'sigla': 'FC'}

MySQL 5 の同じデータベースに対して同じコードを使用していますが、完全に機能します。何が悪いのかわかりません。postgres の拡張子を unicode に登録したのですが、うまくいきません。私は困惑しています。もっと経験豊富な人の助けが必要です。

4

2 に答える 2

3

エラー ログによると、0xec2d43シーケンスは iso-8859-1ì-Cの名前「Forlì-Cesena」の一部となる 3 文字に対応しています。

そのため、プログラムは UTF-8 ではなく有効な iso-8559-1 を送信していますが、サーバーは UTF-8 を予期しています。

この問題を解決する最も簡単な方法は、クライアント側で次の SQL ステートメントを発行して、実際のエンコーディングについてサーバーに通知することです。

SET client_encoding=latin1;

それか、データをデータベースに渡す前にUTF-8に変換します。これが@Tometzkyの答えです。

于 2012-10-25T12:45:38.063 に答える
1

国際文字を含む可能性のあるデータが Unicode 文字列であることを確認してください。'Forl\xec-Cesena'挿入しようとしている文字列はLatin1( ISO-8859-1) エンコードされています。だから使う

unicode('Forl\xec-Cesena','Latin1')

それをユニコード文字列に変換します。

于 2012-10-25T11:52:27.820 に答える