python - SQLAlchemy 与 PostgreSQL Unicode 问题

标签 python mysql postgresql unicode orm

我需要使用 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/

相关文章:

python - 如何在 NumPy 中将三角矩阵转换为正方形?

python - K-Means:将集群分配给新的数据点

java - 两台服务器共享数据库

sql - 如何添加一列,如另一列的 sum()

sql - 返回最新的 'streak' 数据行

postgresql - 如何为 PostgreSQL 11 服务器设置后台 worker ?

python - 在两个向量 vpython 之间创建一个角度?

php - 带有固定 header 的可滚动 echo 数据库表

php - 使用在线PHP数据库进行离线测试,但不上传文件到服务器

python - Django - 从表单中的列表中的列表获取POST数据