繁体   English   中英

如何在 Python 中的 SQLAlchemy / Postgres 中实际设置 utf-8 编码

[英]How to actually set utf-8 encoding in SQLAlchemy / Postgres in Python

我正在使用 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 我也尝试了这些解决方案:

例如,这是我的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM