【问题标题】:Cannot get the data from MySQL and render it in Django无法从 MySQL 获取数据并在 Django 中呈现
【发布时间】:2020-05-18 22:53:03
【问题描述】:

我启动了 Django 项目来维护服务。然后我收到以下错误。

UnicodeDecodeError at /register/
'utf-8' codec can't decode byte 0xb7 in position 3: invalid start byte 

使用模板渲染页面是非常简单的操作。 Django 说模板文件中发生错误,但它被解码为 UTF-8。

工作环境是,

- Python 3.6.10 installed by pyenv.
- Django 2.1.8
- macOS Catalina

更新!!

在错误日志中,我找到了关于mysql连接的错误日志。我在 AWS RDS 中外部配置了测试 mysql 数据库。所以这将是线索。

........
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/models/query.py" in _fetch_all
  1186.             self._result_cache = list(self._iterable_class(self))
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/models/query.py" in __iter__
  54.         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql
  1065.             cursor.execute(sql, params)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  100.             return super().execute(sql, params)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  68.         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute_with_wrappers
  77.         return executor(sql, params, many, context)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  85.                 return self.cursor.execute(sql, params)
File "/Users/jinhoyoo/.pyenv/versions/3.6.10/envs/youha/lib/python3.6/site-packages/django/db/backends/mysql/base.py" in execute
  71.             return self.cursor.execute(query, args)
........

【问题讨论】:

标签: python mysql django utf-8


【解决方案1】:

B7 是 latin1 中“中间点”的十六进制。听起来您的客户端正在使用 latin1,但您的数据库设置需要 utf8。

参见Trouble with UTF-8 characters; what I see is not what I stored中的“最佳实践”

【讨论】:

  • 谢谢,瑞克。这是一个很好的建议。在我的例子中,所有数据和代码都被编码为 UTF-8。只有mysql客户端有问题。 ;-)
【解决方案2】:

我找到了原因。 MySQL 8.0.19 版本有问题。您应该使用 8.0.18 下的 mysql 版本作为客户端。

您只能通过brew install mysql-client安装mysql客户端,然后您将获得mysql客户端8.0.18。然后按照https://github.com/PyMySQL/mysqlclient-python 重新安装mysqlclient python 模块。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多