[英]How to actually set utf-8 encoding in SQLAlchemy / Postgres in Python
我正在使用 Flask 和 Postgresql 数据库(使用 SQLAlchemy)开发 web 应用程序。 它工作得很好。 除了一个小问题:所有文本数据都采用某种编码,它不是 utf-8(至少我认为不是)。
我环顾四周寻找任何可能的解决方案,这就是我尝试过的:
# -*- 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
。 我也尝试了这些解决方案:
例如,这是我的 select 函数之一(但问题发生在每个 select / 插入 / 更新函数中):
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
正如 JosefZ 所说,这是一个Mojibake案例。 之所以会出现这个问题,是因为一些条目是通过 shell 插入的,并且没有编码并导致这种不一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.