Python Django`auth`和`contenttypes`中断syncdb
当我发出命令时:Python Django`auth`和`contenttypes`中断syncdb,python,django,django-models,python-2.7,Python,Django,Django Models,Python 2.7,当我发出命令时: python manage.py syncdb--database=mydb 它显示如下输出 Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creat
python manage.py syncdb--database=mydb
它显示如下输出
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_manager(settings)
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 459, in execute_manager
utility.execute()
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/usr/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs
emit_post_sync_signal(created_models, verbosity, interactive, db)
File "/usr/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal
interactive=interactive, db=db)
File "/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send
response = receiver(signal=self, sender=sender, **named)
File "/usr/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 35, in create_permissions
ctype = ContentType.objects.get_for_model(klass)
File "/usr/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 42, in get_for_model
defaults = {'name': smart_unicode(opts.verbose_name_raw)},
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 134, in get_or_create
return self.get_query_set().get_or_create(**kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 442, in get_or_create
return self.get(**lookup), False
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 361, in get
num = len(clone)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 85, in __len__
self._result_cache = list(self.iterator())
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 291, in iterator
for row in compiler.results_iter():
File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 763, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 818, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 337, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.DatabaseError: no such table: django_content_type
正在创建表。。。
创建表auth\u权限
正在创建表身份验证组权限
创建表auth_组
创建表auth\u user\u user\u权限
创建表身份验证用户组
创建表auth\u user
创建表django_内容_类型
回溯(最近一次呼叫最后一次):
文件“manage.py”,第14行,在
执行\u管理器(设置)
文件“/usr/lib/python2.7/site packages/django/core/management/__init__.py”,第459行,在execute_manager中
utility.execute()
文件“/usr/lib/python2.7/site packages/django/core/management/__init__.py”,执行中第382行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/usr/lib/python2.7/site-packages/django/core/management/base.py”,第196行,运行于_argv
self.execute(*args,**选项._dict__;
文件“/usr/lib/python2.7/site packages/django/core/management/base.py”,执行中的第232行
输出=self.handle(*args,**选项)
文件“/usr/lib/python2.7/site packages/django/core/management/base.py”,第371行,在handle中
返回self.handle\u noargs(**选项)
handle_noargs中的文件“/usr/lib/python2.7/site packages/django/core/management/commands/syncdb.py”,第110行
发出后同步信号(创建的模型、冗余、交互、db)
文件“/usr/lib/python2.7/site packages/django/core/management/sql.py”,第189行,在emit\u post\u sync\u信号中
交互式=交互式,db=db)
文件“/usr/lib/python2.7/site packages/django/dispatch/dispatcher.py”,第172行,在send中
响应=接收方(信号=自身,发送方=发送方,**已命名)
文件“/usr/lib/python2.7/site packages/django/contrib/auth/management/_init__.py”,创建权限中的第35行
ctype=ContentType.objects.get\u for\u模型(klass)
文件“/usr/lib/python2.7/site packages/django/contrib/contenttypes/models.py”,第42行,在get_for_model中
默认值={'name':smart\u unicode(opts.verbose\u name\u raw)},
文件“/usr/lib/python2.7/site packages/django/db/models/manager.py”,第134行,在get_或_create中
返回self.get\u query\u set()
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第442行,在get_或_create中
返回self.get(**查找),False
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,get中第361行
num=len(克隆)
文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第85行,在__
self.\u result\u cache=list(self.iterator())
迭代器中的文件“/usr/lib/python2.7/site packages/django/db/models/query.py”,第291行
对于编译器.results\u iter()中的行:
文件“/usr/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第763行,在results\u iter中
对于self.execute_sql(多)中的行:
文件“/usr/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第818行,在execute_sql中
cursor.execute(sql,params)
文件“/usr/lib/python2.7/site packages/django/db/backends/util.py”,执行中的第40行
返回self.cursor.execute(sql,params)
文件“/usr/lib/python2.7/site packages/django/db/backends/sqlite3/base.py”,执行中的第337行
返回Database.Cursor.execute(self、query、params)
django.db.utils.DatabaseError:没有这样的表:django\u content\u type
我有一个自定义db路由器,它基本上被设置为django的示例,除了我的模型上有一个自定义属性,以便它知道默认的数据库
syncdb
在mysettings.py安装的应用程序中运行时
我注释掉:django.contrib.auth
和django.contrib.contenttypes
。这个问题已经出现了一段时间,但一直推迟到现在,那时我需要开始验证。如果你想要我的db路由器,我也会发布我在这里解释了一个类似的问题:
您不需要注释掉contrib.auth和contrib.contenttypes。只需确保所有django模型(用户、会话和权限)仅在1个数据库中使用,可以将其视为主数据库
这不会直接解决您的问题,但可以作为处理多个db和db路由器的起点。您需要知道的是,每个模型在数据库中都有自己的内容类型。
当django对象(user/session/permission)不限于单个数据库时,就会出现问题,然后将它们创建到每个数据库中。而且,由于内容类型使模型具有唯一性,因此在多个数据库中为单个类型提供内容类型可能会导致上述其他SO问题中解释的问题。在Django 1.4中,您必须在项目的顶级文件夹中启动此命令(路径\到\项目/您\项目而不是路径\到\项目/您\项目)只有一个地方可以调用syncdb,因为它基于
manage.py
文件的位置实际上,您甚至可以在内部文件夹中运行syncdb。这可能是错误的,但你可以。如果您使用slqlite,它将创建新的数据库;我不知道这是否是django 1.4的bug,但在我的项目中,它运行时没有任何抱怨。