解决 AttributeError: 'str' object has no attribute 'decode'. Did you mean: 'encode'?(query = query.decode(errors='replace')引起的问题)

发布时间 2023-05-22 17:16:13作者: 山海经-小怪

AttributeError: 'str' object has no attribute 'decode'. Did you mean: 'encode'?

运行django项目,出现上面错误的提示信息

我用的是  python3.10.11 + Django2.2.4

解决这个问题只需要改虚拟环境中的operations.py文件中的一行代码即可。

错误复现:

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\A\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "C:\Users\A\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "C:\ENV\crm_pro\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "C:\ENV\crm_pro\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run
    self.check_migrations()
  File "C:\ENV\crm_pro\lib\site-packages\django\core\management\base.py", line 453, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "C:\ENV\crm_pro\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\ENV\crm_pro\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__
    self.build_graph()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\migrations\loader.py", line 212, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\migrations\recorder.py", line 73, in applied_migrations
    if self.has_table():
  File "C:\ENV\crm_pro\lib\site-packages\django\db\migrations\recorder.py", line 56, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\base\base.py", line 256, in cursor
    return self._cursor()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\base\base.py", line 233, in _cursor
    self.ensure_connection()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\base\base.py", line 197, in connect
    self.init_connection_state()
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\mysql\base.py", line 231, in init_connection_state
    if self.features.is_sql_auto_is_null_enabled:
  File "C:\ENV\crm_pro\lib\site-packages\django\utils\functional.py", line 80, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\mysql\features.py", line 82, in is_sql_auto_is_null_enabled
    cursor.execute('SELECT @@SQL_AUTO_IS_NULL')
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\utils.py", line 103, in execute
    sql = self.db.ops.last_executed_query(self.cursor, sql, params)
  File "C:\ENV\crm_pro\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'. Did you mean: 'encode'?

找个这个文件:C:\ENV\crm_pro\lib\site-packages\django\db\backends\mysql\operations.py,根据自己电脑文件路径查找,报错上面有提示信息

把这行 query = query.decode(errors='replace') 注释掉,然后换成 query = errors = 'replace',然后重新启动项目即可。

温馨提示:文件改完后记得保存一下。

修改后的代码截图如下:

 

看着这里问题就完美解决了!

突然感觉头发还能长点了~