python - Django mysqlclient backend produces django.db.utils.OperationalError: (2059, ) in Windows
问题描述
I'm trying to get my Django project running on a Windows 10 computer and it throws a very unspecific error when trying to establish a database connection. In this SO-post the problem was with the authentication, but in that post details about the error is displayed instead of <\NULL> which gives very little to go on.
The entire error looks like this:
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000018C3B8761E0>
Traceback (most recent call last):
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\mysql\base.py", line 236, in get_new_connection
return Database.connect(**conn_params)
File "D:\Program\LiquidMarket\venv\lib\site-packages\MySQLdb\__init__.py", line 85, in Connect
return Connection(*args, **kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\MySQLdb\connections.py", line 204, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2059, <NULL>)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run
self.check(display_num_errors=True)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\core\management\base.py", line 364, in check
include_deployment_checks=include_deployment_checks,
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\core\management\base.py", line 351, in _run_checks
return checks.run_checks(**kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\core\checks\registry.py", line 73, in run_checks
new_errors = check(app_configs=app_configs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\core\checks\model_checks.py", line 27, in check_all_models
errors.extend(model.check(**kwargs))
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\base.py", line 1200, in check
errors.extend(cls._check_fields(**kwargs))
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\base.py", line 1272, in _check_fields
errors.extend(field.check(**kwargs))
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\fields\__init__.py", line 894, in check
errors = super().check(**kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\fields\__init__.py", line 206, in check
errors.extend(self._check_backend_specific_checks(**kwargs))
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\fields\__init__.py", line 303, in _check_backend_specific_checks
return connections[db].validation.check_field(self, **kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\validation.py", line 21, in check_field
field_type = field.db_type(self.connection)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\models\fields\__init__.py", line 648, in db_type
return connection.data_types[self.get_internal_type()] % data
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\utils\functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\mysql\base.py", line 133, in data_types
if self.features.supports_microsecond_precision:
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\utils\functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\mysql\features.py", line 65, in supports_microsecond_precision
return self.connection.mysql_version >= (5, 6, 4)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\utils\functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\mysql\base.py", line 345, in mysql_version
with self.temporary_connection() as cursor:
File "C:\Users\marcu\AppData\Local\Programs\Python\Python36\lib\contextlib.py", line 81, in __enter__
return next(self.gen)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 576, in temporary_connection
cursor = self.cursor()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 255, in cursor
return self._cursor()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 232, in _cursor
self.ensure_connection()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "D:\Program\LiquidMarket\venv\lib\site-packages\django\db\backends\mysql\base.py", line 236, in get_new_connection
return Database.connect(**conn_params)
File "D:\Program\LiquidMarket\venv\lib\site-packages\MySQLdb\__init__.py", line 85, in Connect
return Connection(*args, **kwargs)
File "D:\Program\LiquidMarket\venv\lib\site-packages\MySQLdb\connections.py", line 204, in __init__
super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (2059, <NULL>)
Using python 3.6.6 and mysqlclient 1.3.13, although 1.3.12 has also been tried.
Database settings:
DATABASES = {
'default': {
'ENGINE': "django.db.backends.mysql", # 'mysql.connector.django'
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'autocommit': True,
},
},
}
解决方案
更改新版本mysql的加密方式,因为django不支持新加密
推荐阅读
- mongodb - 使用 updateMany MongoDb 函数有什么缺点或限制吗?
- javascript - 代码同时运行(打字机效果)
- c# - SQLite syntax error inside of command: 'SQL logic error near "=": syntax error'
- spring - 如何在不更改编码的情况下使用 spring 返回文件,或者只设置 UTF-8-BOM 编码
- react-native - 将图像 url 作为参数传递给 react-navigation Deeplink
- prometheus - Grafana 自我指标和跟踪警报触发器
- gcc - /usr/bin/ld: 找不到 /usr/lib64/libpthread_nonshared.a
- java - 升级到 Gradle 7 后 Android Gradle Javadoc 损坏
- swift - 如何在 Swift 5.5 中将 List 中的新绑定与子项一起使用?
- javascript - 如何在href中使用没有id的目标子div?