我需要使用 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) invalid byte sequence for encoding "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 上对同一个数据库使用了相同的代码,它工作得很好。我不知道出了什么问题。我为 unicode 注册了 postgres 的扩展,但这不起作用。我很困惑,我需要更有经验的人的帮助。
最佳答案
0xec2d43
序列在 iso-8859-1 中对应于 3 个字符 ì-C
,根据错误日志。
所以程序正在发送有效的 iso-8559-1,而不是 UTF-8,而服务器需要 UTF-8。
解决该问题的最简单方法是通过在客户端发出以下 SQL 语句来通知服务器实际编码:
SET client_encoding=latin1;
要么在将数据传递到数据库之前将其转换为 UTF-8,这是@Tometzky 的回答。
关于python - SQLAlchemy 与 PostgreSQL Unicode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067176/