【发布时间】:2021-01-18 14:35:16
【问题描述】:
我使用的是 Django 1.11、python 3.6 和 mysqlclient 1.4.6。我需要将 Django 查询集转换为列表。查询集中的对象有一个带有 unicode emoji 值的字段。 (参见:field=u'✅ This is the field value')mySQL 中的特定表和字段使用utf8mb4_unicode_ci 编码。
当我运行qs_list = list(qs) 时,MySQL 会抛出一个 Unicode 错误,我认为这是由评估查询集时字段中的表情符号引起的。
文件编码:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
查询集:
qs = Fake.objects.filter(..)
qs_list = list(qs)
错误:
<class 'UnicodeDecodeError'>
Exception: 'utf-8' codec can't decode byte 0xed in position 11: invalid continuation byte
File "/home/mysite/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__
self._fetch_all()
File "/home/mysite/lib/python3.6/site-packages/django/db/models/query.py", line 1121, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/home/mysite/lib/python3.6/site-packages/django/db/models/query.py", line 53, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
File "/home/mysite/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 899, in execute_sql
raise original_exception
File "/home/mysite/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 889, in execute_sql
cursor.execute(sql, params)
File "/home/mysite/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/mysite/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 101, in execute
return self.cursor.execute(query, args)
File "/home/mysite/lib/python3.6/site-packages/MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "/home/mysite/lib/python3.6/site-packages/MySQLdb/cursors.py", line 317, in _query
self._post_get_result()
File "/home/mysite/lib/python3.6/site-packages/MySQLdb/cursors.py", line 352, in _post_get_result
self._rows = self._fetch_row(0)
File "/home/mysite/lib/python3.6/site-packages/MySQLdb/cursors.py", line 325, in _fetch_row
return self._result.fetch_row(size, self._fetch_type)
是否有一个简单的解决方案或解决方法?如何在不评估查询集的情况下获取查询集中的对象列表?
【问题讨论】:
-
要么告诉它您的数据是 latin1,要么实际提供它的 utf-8 编码数据。
标签: mysql python-3.x django unicode mysql-python