【发布时间】:2020-01-25 00:05:55
【问题描述】:
我正在使用 Flask 和 Postgresql 数据库(使用 SQLAlchemy)开发一个 Web 应用程序。它工作得很好。除了一个小问题:所有文本数据都采用某种不是 utf-8 的编码(至少我认为不是)。
我环顾四周寻找任何可能的解决方案,这是我尝试过的:
- 在项目中的每个 Python 文件中都包含这一行:
# -*- coding: utf-8 -*-
- 这样设置引擎:
def __init__(self):
self.engine = sql.create_engine(os.environ['DATABASE_URL'], encoding='utf8')
self.conn = self.engine.connect()
self.metadata = sql.MetaData()
还有这些先前项目的一些变体,例如 client_encoding='utf8 而不是 encoding='utf8。我也尝试了这些解决方案:
- Encoding error with sqlalchemy and postgresql
- SQLAlchemy result for UTF-8 column is of type 'str', why?
- how to use `charset` and `encoding` in `create_engine` of SQLAlchemy (to create pandas dataframe)?
- python encoding utf-8
- Python encoding unicode utf-8
例如,这是我的选择函数之一(但问题发生在每个选择/插入/更新函数中):
def get_produtos(self, id):
produtos = sql.Table('produtos', self.metadata, autoload=True,
autoload_with=self.engine).columns
parceiros = sql.Table('parceiros', self.metadata, autoload=True,
autoload_with=self.engine).columns
q = sql.select([produtos.id, produtos.nome, parceiros.nome_parceiro,
produtos.valor, produtos.qtd_desconto,
parceiros.id_parceiro])
q = q.where(produtos.id == id)
return self.conn.execute(q).fetchall()
程序没有引发任何异常,只是数据带有错误的编码。
我的数据库中的数据是这样的:https://i.imgur.com/8BA1i3N.png
这就是数据在我的应用中的显示方式:https://i.imgur.com/NZBxFtl.png
【问题讨论】:
-
您能否edit 提出从 psql 控制台添加此命令的输出的问题:
\l <name of your database(或psql --list | grep '<name of your database>'。这将向我们展示您的数据库的默认设置。 -
应用程序在 Heroku 上运行,所以我只能访问数据库本身。运行您所说的登录我的数据库的命令(不确定这样做是否正确),我得到了这个:i.imgur.com/S1ZQxOT.png
-
一个公然的mojibake 案例。您正确地怀疑 所有文本数据都采用某种编码,而不是 utf-8。
'Se‡Æo Eletr“nicos'绝对是这个结果:'Seção Eletrônicos'.encode('cp850').decode('cp1252')… -
@JosefZ 这个问题实际上已经解决了一段时间,但感谢您的回答,因为它可能对其他人有所帮助
-
@MarcosSombra 好吧。然后,你应该answer the question yoursef(最后接受答案(See this page 解释为什么这很重要。)
标签: python postgresql flask utf-8 sqlalchemy