【问题标题】:Django syncdb errorDjango同步数据库错误
【发布时间】:2011-04-29 02:09:12
【问题描述】:

我安装的应用程序中有 django.contrib.auth,大约 10 分钟前一切正常。我删除了现有的数据库,因为我遇到了南迁移问题。当我尝试重建它时,我得到一个错误。

错误:django.db.utils.DatabaseError:没有这样的表:auth_user

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 219, in execute
    self.validate()
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors
    self._populate()
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 61, in _populate
    self.load_app(app_name, True)
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 78, in load_app
    models = import_module('.models', app_name)
  File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 22, in <module>
    class Ingredient(models.Model):
  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 26, in Ingredient
    FKowner = models.ForeignKey(User, default=User.objects.get(pk=1).id)
  File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 342, in get
    num = len(clone)
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 80, in __len__
    self._result_cache = list(self.iterator())
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 271, in iterator
    for row in compiler.results_iter():
  File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 677, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 732, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 200, in execute
    return Database.Cursor.execute(self, query, params)
**django.db.utils.DatabaseError: no such table: auth_user**

【问题讨论】:

  • 我看到了同样的错误,因为我在我的 TestCase 的 init 函数中抓取了一个虚拟用户,这发生在数据库准备好之前(正如亨利在下面指出的那样)。就我而言,将 User 操作移动到测试功能解决了这个问题。

标签: python django syncdb


【解决方案1】:

问题是您正在针对用户模型运行查询

  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 26, in Ingredient
FKowner = models.ForeignKey(User, default=User.objects.get(pk=1).id)

在 syncdb 过程中(实际上是在字段声明期间,因此在导入模块的任何时候,例如在此验证过程中)。

这将确保在创建 auth_user 表之前执行 auth_user 查询。

使用默认用户获取功能的更安全的方法是执行

def get_default_user():
    return User.objects.get(pk=1)

然后在你的字段声明中,做

FKowner = models.ForeignKey(User, default=get_default_user)

根据model field reference 默认可以是可调用的。请注意,如果您在其中使用 get_default_user() 会遇到同样的问题 - 然后它会立即执行,而不是按需执行。

【讨论】:

  • 感谢您快速详细的回复。我能够通过删除应用程序并构建数据库来解决它。然后在我拥有 user_auth 表后将其添加回我安装的应用程序。但现在我明白发生了什么,并将做出相应的改变。再次感谢。
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多