解决django2.2启动-str-object-has-no-attribute-decode报错问题

Django2.2报错--AttributeError: 'str' object has no attribute 'decode'的解决方案,仅算是临时解决,所有更好的解决方案应该斟酌使用本方法

报错信息

G:\book_pulisher>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\ProgramData\Anaconda3\lib\threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper fn(*args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run self.check_migrations() File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\management\base.py", line 453, in check_migrations executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__ self.loader = MigrationLoader(self.connection) File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__ self.build_graph() File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\migrations\loader.py", line 212, in build_graph self.applied_migrations = recorder.applied_migrations() File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\migrations\recorder.py", line 73, in applied_migrations if self.has_table(): File "C:\ProgramData\Anaconda3\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:\ProgramData\Anaconda3\lib\site-packages\django\db\backends\base\base.py", line 256, in cursor return self._cursor() File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\backends\base\base.py", line 233, in _cursor self.ensure_connection() File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection self.connect() File "C:\ProgramData\Anaconda3\lib\site-packages\django\db\backends\base\base.py", line 197, in connect self.init_connection_state() File "C:\ProgramData\Anaconda3\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:\ProgramData\Anaconda3\lib\site-packages\django\utils\functional.py", line 80, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\ProgramData\Anaconda3\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:\ProgramData\Anaconda3\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:\ProgramData\Anaconda3\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'

解决方案

我使用的是anaconda python,找到** C:\ProgramData\Anaconda3\Lib\site-packages\django\db\backends\mysql\operations.py **

因为这里是报错的语句,在145行,如下

    def last_executed_query(self, cursor, sql, params):
        # With MySQLdb, cursor objects have an (undocumented) "_executed" # attribute where the exact query sent to the database is saved. # See MySQLdb/cursors.py in the source distribution. query = getattr(cursor, '_executed', None) if query is not None: query = query.decode(errors='replace') return query

由此可看到,这里是一个if的判断,功能暂时不讨论,但是目前看是会触发这个if的,decode作为解码函数,那么可不可以直接返回,将145、146的if语句注释掉再尝试

    def last_executed_query(self, cursor, sql, params): # With MySQLdb, cursor objects have an (undocumented) "_executed" # attribute where the exact query sent to the database is saved. # See MySQLdb/cursors.py in the source distribution. query = getattr(cursor, '_executed', None) # if query is not None: # query = query.decode(errors='replace') return query

再次启动项目,成功启动

G:\book_pulisher>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
April 03, 2019 - 20:35:51 Django version 2.2, using settings 'book_pulisher.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. Not Found: / [03/Apr/2019 20:35:53] "GET / HTTP/1.1" 404 3049 Not Found: /favicon.ico [03/Apr/2019 20:35:53] "GET /favicon.ico HTTP/1.1" 404 3100 Not Found: /^publisher_list/ [03/Apr/2019 20:36:00] "GET /%5Epublisher_list/ HTTP/1.1" 404 3117 [03/Apr/2019 20:36:07] "GET /publisher_list/ HTTP/1.1" 200 7384 [03/Apr/2019 20:36:07] "GET /static/dashboard.css HTTP/1.1" 200 1557 [03/Apr/2019 20:36:07] "GET /static/fontawesome/css/font-awesome.min.css HTTP/1.1" 200 32422 [03/Apr/2019 20:36:07] "GET /static/bootstrap/js/bootstrap.min.js HTTP/1.1" 200 37045 [03/Apr/2019 20:36:07] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 121200 [03/Apr/2019 20:36:07] "GET /static/jquery-3.3.1.js HTTP/1.1" 200 271751 [03/Apr/2019 20:36:07] "GET /static/fontawesome/fonts/fontawesome-webfont.woff2?v=4.7.0 HTTP/1.1" 200 77160 [03/Apr/2019 20:36:10] "GET /book_list/ HTTP/1.1" 200 7426

注意

  • 仅算是临时解决,所有更好的解决方案应该斟酌使用本方法
  • 不要信网上说的,把decode改为encode

猜你喜欢

转载自www.cnblogs.com/xiaocaocaohahaha/p/12734969.html