问题描述:
安装django_celery_results后,将任务结果保存在数据库中,但是在成功运行完任务时将执行结果保存在数据库中时报错
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 11001] No address found)")
如下:
Traceback (most recent call last):
File "f:\django_learn_project3\mysite\venv\lib\site-packages\celery\app\trace.py", line 449, in trace_task
uuid, retval, task_request, publish_result,
File "f:\django_learn_project3\mysite\venv\lib\site-packages\celery\backends\base.py", line 149, in mark_as_done
self.store_result(task_id, result, state, request=request)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\celery\backends\base.py", line 407, in store_result
request=request, **kwargs)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django_celery_results\backends\database.py", line 35, in _store_result
task_kwargs=task_kwargs,
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django_celery_results\managers.py", line 50, in _inner
return fun(*args, **kwargs)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django_celery_results\managers.py", line 126, in store_result
obj, created = self.get_or_create(task_id=task_id, defaults=fields)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\query.py", line 538, in get_or_create
return self.get(**kwargs), False
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\query.py", line 402, in get
num = len(clone)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\query.py", line 256, in __len__
self._fetch_all()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\query.py", line 1242, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\query.py", line 55, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1131, in execute_sql
cursor = self.connection.cursor()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\base\base.py", line 256, in cursor
return self._cursor()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\base\base.py", line 233, in _cursor
self.ensure_connection()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
self.connect()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
self.connect()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\base\base.py", line 195, in connect
self.connection = self.get_new_connection(conn_params)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\django\db\backends\mysql\base.py", line 227, in get_new_connection
return Database.connect(**conn_params)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\pymysql\__init__.py", line 94, in Connect
return Connection(*args, **kwargs)
File "f:\django_learn_project3\mysite\venv\lib\site-packages\pymysql\connections.py", line 325, in __init__
self.connect()
File "f:\django_learn_project3\mysite\venv\lib\site-packages\pymysql\connections.py", line 630, in connect
raise exc
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 11001] No address found)")
原因分析:
无法在localhost上连接mysql服务器
解决方案:
在django项目settings.py中设置DATABASES的中 [HOST] 的[localhost]改为[127.0.0.1]
完成代码如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'project51_database',
'USER': "root",
"PASSWORD": "root",
"HOST": "127.0.0.1",
"PORT": "3306",
}
}
再次启动django服务和worker,结果保存成功。