Сельдерей, Джанго и PyMySQL

У меня есть приложение django, подключенное к базе данных MySQL, которая использует PyMySQL, а не MySQLdb. См. популярный ответ на этот вопрос для более подробной информации.

Теперь мне необходимо создать периодическую задачу с помощью Celery. Я следил за документацией по периодическим задачам здесь.

Когда я запускаю команду celery -A proj beat, я получаю следующую ошибку:

  File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/forms.py", line 17, in <module>
    from django.contrib.auth.models import User
  File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/models.py", line 48, in <module>
    class Permission(models.Model):
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/base.py", line 96, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/base.py", line 264, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/options.py", line 124, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/local/lib/python3.4/dist-packages/django/db/__init__.py", line 34, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 198, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 113, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/local/lib/python3.4/dist-packages/django/db/backends/mysql/base.py", line 17, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'

Он жалуется на модуль MySQLdb, но я не думаю, что использую MySQLdb. Может ли кто-нибудь предложить какие-либо советы о том, как решить эту проблему?


person Matchday    schedule 13.11.2014    source источник


Ответы (2)


Я столкнулся с этой же проблемой и смог исправить ее, добавив в приложение celery следующее:

import pymysql
pymysql.install_as_MySQLdb()
person tiradoe    schedule 29.03.2015

Установите подходящий клиент mysql для операционной системы вашего компьютера, чтобы решить эту проблему. :) в python 2.x вы должны: sudo pip install MySQL-python в python 3.x вы должны: pip3 install mysqlclient

person qin fei    schedule 11.03.2018
comment
Я предполагаю, что OP должен либо переключиться на MySQLdb с PyMySQL, либо сказать Django/Celery использовать PyMySQL. Просто установка MySQLdb не решит проблему. - person yentsun; 11.03.2018
comment
И теперь я использую PyMySQL в python3-sqlalchemy и использую драйвер mysql+pymysql: SQLALCHEMY_DATABASE_URI = ('mysql+pymysql://username:password@my-ip:mysql-port/db-name?charset=utf8') - person qin fei; 05.05.2019