python - 没有名为 'django.db.backends.mysql.compiler' 的模块

标签 python mysql django

自从我们从 Django 1.11.5 升级到 Django 2.1.3 (python 3.5.2) 以来,我遇到了这个奇怪的错误。我们使用 MySQL 5.7.24。最新安装的软件包是:

  • django-mysql==2.4.1
  • mysqlclient==1.3.14

我们还使用 celery :

  • celery ==4.2.1
  • django-celery-beat==1.3.0
  • django-celery-结果==1.0.4

仅当我们执行 celery 任务 (perform_display_ads_check) 时才会出现该错误。如果我们在没有 .delay() 的情况下运行该函数,它就会起作用。

以下是此任务的代码:

@shared_task
def perform_display_ads_check():
    try:
        checker = DisplayAdsCheck()
        checker.check_all()
    except Exception as e:
        logger.exception(str(e))
        message = 'Cannot check display ads. Reason: {}'.format(str(e))
        send_slack_message.delay(message=message)
        raise Reject(requeue=False)

send_slack_message.delay(message=message) 有效。此操作不涉及任何数据库。

这是日志:

    [2018-12-05 09:51:47,626: WARNING/ForkPoolWorker-1] Task clients.tasks.display_ads_check.perform_display_ads_check[535c8b34-5cf4-48e0-a16d-a22b5979f38b] reject requeue=False: None
Traceback (most recent call last):
  File "/home/tool/www/project/clients/tasks/display_ads_check.py", line 26, in perform_display_ads_check
    checker.check_all()
  File "/home/tool/www/project/clients/tasks/display_ads_check.py", line 38, in check_all
    clients = self.process()
  File "/home/tool/www/project/clients/tasks/display_ads_check.py", line 81, in process
    for client in clients_qs.iterator():
  File "/home/tool/.virtualenvs/tool_py3/local/lib/python3.5/dist-packages/django/db/models/query.py", line 50, in __iter__
  File "/home/tool/.virtualenvs/tool_py3/local/lib/python3.5/dist-packages/django/db/models/sql/query.py", line 256, in get_compiler
  File "/home/tool/.virtualenvs/tool_py3/local/lib/python3.5/dist-packages/django/db/backends/base/operations.py", line 316, in compiler
  File "/home/tool/.virtualenvs/tool_py3/lib64/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 985, in _gcd_import
  File "<frozen importlib._bootstrap>", line 968, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
ImportError: No module named 'django.db.backends.mysql.compiler'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/tool/.virtualenvs/tool_py3/local/lib/python3.5/dist-packages/celery/app/trace.py", line 382, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/tool/.virtualenvs/tool_py3/local/lib/python3.5/dist-packages/celery/app/trace.py", line 641, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/tool/www/project/clients/tasks/display_ads_check.py", line 31, in perform_display_ads_check
    raise Reject(requeue=False)
celery.exceptions.Reject: (None, False)

你有什么线索吗?有小费吗?请指教。

更新#1

我们注意到它在 dist-packages 中查找该文件,但其中没有 Django 包。 Django 位于 site-packages 中。

更新#2

终于找到问题所在了。解决方案是重新创建虚拟环境。

最佳答案

解决了!

终于找到问题所在了。解决方案是重新创建虚拟环境。

关于python - 没有名为 'django.db.backends.mysql.compiler' 的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636004/

相关文章:

python - 试图确定文件是否已被 uuencoded

python - 如何将 Pandas 中的非零条目转换为带列表的字典?

python - 在 virtualenv 中安装 mysqlclient 时出错

mysql - rails 。 postgres 无法将数组转换为字符串

mysql - wamp 或 xampp : how to upgrade to mysql 6?

javascript - 想要创建一个新的应用程序用于网站流量监控(分析)

python - 用于为所有外部链接添加 relnofollow 的 Django 中间件

python - iter() 是如何工作的,它给出 "TypeError: iter(v, w): v must be callable"

Python:读取多个源txt文件,按条件复制到1个输出文件中

php - 网站本地化技术