【问题标题】:Django Setup: No Such Table auth_userDjango 设置:没有这样的表 auth_user
【发布时间】:2019-03-25 16:50:01
【问题描述】:

每次我们在新环境中设置 Django 项目并尝试启动服务器(migraterunserver)时,都会显示错误消息 django.db.utils.OperationalError: no such table: auth_user(完整的错误消息如下)。

我假设这是因为在我们的某些模型中使用用户模型作为外键(示例如下),并且设置了新系统(尚未创建数据库)Django 尝试为我们的自定义创建表模型并由于尚未创建外键(用户表)而失败。

# Model for projects (example)
class Projekt(models.Model):
    project_name = models.CharField(max_length=100, unique=True)
    project_manager = models.ForeignKey(User, related_name="Manager", on_delete=models.DO_NOTHING)

我的问题是:有什么最佳做法可以防止这种情况发生吗?目前,我们只是从我们正在运行的系统中为我们获得的每个新开发人员复制数据库,这目前有效,但不适用于软件的开源分发。

我已经尝试过不同的东西,比如thisthis),但是没有成功。我在每个 Django 项目中都遇到了这个问题。


USERNAME$ python3 manage.py migrate
  Traceback (most recent call last):
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
      return self.cursor.execute(sql, params)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 296, in execute
      return Database.Cursor.execute(self, query, params)
  sqlite3.OperationalError: no such table: auth_user

  The above exception was the direct cause of the following exception:

  Traceback (most recent call last):
    File "manage.py", line 15, in <module>
      execute_from_command_line(sys.argv)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
      utility.execute()
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
      self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv
      self.execute(*args, **cmd_options)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/base.py", line 350, in execute
      self.check()
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/base.py", line 379, in check
      include_deployment_checks=include_deployment_checks,
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 60, in _run_checks
      issues.extend(super()._run_checks(**kwargs))
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/management/base.py", line 366, in _run_checks
      return checks.run_checks(**kwargs)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/checks/registry.py", line 71, in run_checks
      new_errors = check(app_configs=app_configs)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/checks/urls.py", line 40, in check_url_namespaces_unique
      all_namespaces = _load_all_namespaces(resolver)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/checks/urls.py", line 57, in _load_all_namespaces
      url_patterns = getattr(resolver, 'url_patterns', [])
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/functional.py", line 37, in __get__
      res = instance.__dict__[self.name] = self.func(instance)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/urls/resolvers.py", line 533, in url_patterns
      patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/functional.py", line 37, in __get__
      res = instance.__dict__[self.name] = self.func(instance)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/urls/resolvers.py", line 526, in urlconf_module
      return import_module(self.urlconf_name)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
      return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
    File "<frozen importlib._bootstrap>", line 983, in _find_and_load
    File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
    File "<frozen importlib._bootstrap_external>", line 728, in exec_module
    File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
    File "/USERNAME/Documents/PROJECTS/PROJECTFOLDER/PROJECT_NAME/urls.py", line 8, in <module>
      path('i/', include('APP1.urls')), # Private space/ Development space
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/urls/conf.py", line 34, in include
      urlconf_module = import_module(urlconf_module)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
      return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
    File "<frozen importlib._bootstrap>", line 983, in _find_and_load
    File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
    File "<frozen importlib._bootstrap_external>", line 728, in exec_module
    File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
    File "/USERNAME/Documents/PROJECTS/PROJECTFOLDER/APP1/urls.py", line 4, in <module>
      from . import views
    File "/USERNAME/Documents/PROJECTS/PROJECTFOLDER/APP1/views.py", line 11, in <module>
      from .forms import AddProject, AddTicket
    File "/USERNAME/Documents/PROJECTS/PROJECTFOLDER/APP1/forms.py", line 5, in <module>
      class AddProject(forms.Form):
    File "/USERNAME/Documents/PROJECTS/PROJECTFOLDER/APP1/forms.py", line 7, in AddProject
      project_manager = forms.ChoiceField(choices=[(user.id, user) for user in User.objects.all()])
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/query.py", line 268, in __iter__
      self._fetch_all()
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/query.py", line 1186, in _fetch_all
      self._result_cache = list(self._iterable_class(self))
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/query.py", line 54, in __iter__
      results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1065, in execute_sql
      cursor.execute(sql, params)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 100, in execute
      return super().execute(sql, params)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 68, in execute
      return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
      return executor(sql, params, many, context)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
      return self.cursor.execute(sql, params)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
      raise dj_exc_value.with_traceback(traceback) from exc_value
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
      return self.cursor.execute(sql, params)
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 296, in execute
      return Database.Cursor.execute(self, query, params)
  django.db.utils.OperationalError: no such table: auth_user

【问题讨论】:

  • migrations 文件夹提交到您的 github 存储库没有任何问题。您是否在 settings.py 文件中将自定义用户模型定义为 AUTH_USER_MODEL=MyUser ?您应该添加与此问题相关的设置文件的重要部分,以便我们可以验证所有内容。你的Project 模型中的User 模型是从哪里导入的?
  • 感谢您的回复。我们实际上不使用自定义用户模型,只是将用户模型作为某些模型的外键,因此这些设置可能并没有真正的帮助。我认为这对于其他外键关系也是一样的......
  • @SK.FazleeRabby 是否有任何(官方)方法来重新创建迁移而无需巨大的开发开销?就像我们在开发过程中改进或删除的对象和属性一样,我们不想重新创建它们只是为了在以后的几次迁移中删除它们......
  • 你也可以将你的提交一分为二,看看这个错误是在哪里引入的。你可以在git-scm.com/docs/git-bisect阅读更多内容。
  • @skalet 遗憾的是,此错误仅在新系统上发生,此时尚未启动数据库,但在所有正在运行的系统上都没有问题。所以这不是解决方案,对不起。

标签: django django-models django-deployment


【解决方案1】:

我在使用 PyCharm 并且在调试配置中错误地设置了工作目录。需要指向包含 manage.py 的目录。可能不是 creyD 的问题,但可能对其他人有所帮助。

【讨论】:

    【解决方案2】:

    我可能迟到了回答这个问题,但同样发生在我身上的是,我从我的应用程序和相关的迁移文件中删除了 pycache 文件,然后还删除了我的案例 sqlite 文件中的数据库文件

    【讨论】:

      【解决方案3】:

      应该将您的迁移添加到版本控制中,并将它们与您的代码库的其余部分一起部署。

      如果你现在有很多多余的迁移,你可以squash他们。

      【讨论】:

      • 感谢您的回复!我确实压缩了迁移,不仅推送了压缩的迁移,还推送了原始迁移,它仍然显示相同的错误......
      【解决方案4】:

      将迁移文件夹添加到 git。这包含正确创建新数据库所需的信息。

      【讨论】:

      • 感谢您的回答。不应该每次都建立一个新的数据库吗?我们在模型上进行了很多更改,我们有很多迁移只是为了测试......(另外会有大量的表要创建(......)只是为了在以后的几次迁移中删除它们)......
      • 如果不敏感,当您在新克隆的 repo 上运行 manage.py migrate 时,您能否提供完整的(或尽可能多的)输出?另外,将__init__.py 添加到您的 git,这就是使您的文件夹成为 python 包的原因。
      • 谢谢,将 init.py 添加到我们的 git(尚未对其进行测试)并在问题中发布了整个错误代码(编辑 2)。非常感谢您一直以来的帮助。
      • 在引发错误之前,您还可以包含正常输出吗?我想查看来自 django 的迁移消息。
      • 在我的问题的更新版本中包含了输出。
      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 2016-12-28
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2017-05-03
      • 2015-06-30
      • 2018-01-18
      相关资源
      最近更新 更多