我需要使用SQLAlchemy创建并连接到数据库PostgreSQL 9.2。到目前为止,我能够用UTF-8创建完整的db,但是在将非ASCII字符放入其中时遇到了问题。这就是我连接数据库的方式:
url=url(drivername=s'postgresql',username='uname',password='pwd',host='localhost',port='5432',database='postgres')
self.engine=创建引擎(url)
然后我创建新的数据库,切换到它,并开始填充它:一切正常。我明白了:
entercursor.execute(语句、参数)
sqlalchemy.exc.DataError:(DataError)编码“UTF8”的字节序列无效:0xec2d43
'插入省(codice廑regione,codice,tc廑provincia廑id,nome,sigla)值,%(codice廑regione)s,%(codice)s,%(tc廑provincia廑id)s,%(nome)s)返回省。id'{nome':'Forl\xec Cesena','codice':40,'codice廑regione':8,'tc廑provincia id':34,'sigla':'FC'}
我在MySQL 5上有相同的数据库代码,它工作得很好。我不知道怎么了。我为unicode注册了postgres的扩展名,但这不起作用。我很困惑,我需要更有经验的人的帮助。

最佳答案

根据错误日志,iso-8859-1中的0xec2d43序列对应于'Forlì-Cesena'名称中的3个字符ì-C
所以程序发送的是有效的iso-8559-1,而不是UTF-8,而服务器需要UTF-8。
解决此问题的最简单方法是通知服务器有关实际编码的信息,方法是在客户端发出以下SQL语句:

SET client_encoding=latin1;

或者在将数据传递到数据库之前将其转换为UTF-8,这是@Tometzky的答案。

10-01 17:48