【问题标题】:Celery, Django and PyMySQL芹菜、Django 和 PyMySQL
【发布时间】:2015-01-10 21:17:40
【问题描述】:

我有一个连接到 MySQL 数据库的 django 应用程序,它使用 PyMySQL 而不是 MySQLdb。有关更多详细信息,请参阅this question 上的热门答案。

现在,我有必要使用Celery 创建一个周期性任务。我遵循了周期性任务的文档here。

当我运行命令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。有人可以就如何解决这个问题提供任何建议吗?

【问题讨论】:

    标签: mysql django mysql-python pymysql celerybeat


    【解决方案1】:

    我遇到了同样的问题,并且能够通过将以下内容添加到 celery 应用程序来解决它:

    import pymysql
    pymysql.install_as_MySQLdb()
    

    【讨论】:

      【解决方案2】:

      为您的计算机操作系统安装合适的 mysql 客户端将解决此问题。:) 在 python 2.x 中你应该:sudo pip install MySQL-python 在 python 3.x 中你应该:pip3 install mysqlclient

      【讨论】:

      • 我猜 OP 必须要么从 PyMySQL 切换到 MySQLdb,要么告诉 Django/Celery 使用 PyMySQL。只安装 MySQLdb 并不能解决问题。
      • 现在我在 python3-sqlalchemy 中使用 PyMySQL 并使用 mysql+pymysql 驱动程序:SQLALCHEMY_DATABASE_URI = ('mysql+pymysql://username:password@my-ip:mysql-port/db-name?charset=utf8')
      猜你喜欢
      • 2012-05-01
      • 2020-08-25
      • 1970-01-01
      • 2021-02-06
      • 2021-11-29
      • 1970-01-01
      • 2012-04-06
      • 2015-09-25
      • 2018-01-27
      相关资源
      最近更新 更多