celery_任务保存到数据库出错_django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localh

你说的曾经没有我的故事 提交于 2020-03-11 01:36:37

问题描述:

安装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,结果保存成功。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!