Django 1.8 migrate不会创建表

YSK*_*YSK 21 python django

yekabathula-macbookair2:roster yekabathula$ python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying api.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK
yekabathula-macbookair2:roster yekabathula$ python manage.py syncdb
/Library/Python/2.7/site-packages/django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9
  warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  No migrations to apply.
Run Code Online (Sandbox Code Playgroud)

执行python manage.py migrate之后,我的models.py不会在数据库中创建表,它可以从django_session等创建其他表.还有什么我需要遵循的吗?

bha*_*arc 89

我在Django 1.10中遇到了类似的问题,上述解决方案都没有为我工作.

最终运行的是运行此命令:

python manage.py migrate --fake myappname zero
Run Code Online (Sandbox Code Playgroud)

这会重置所有迁移(到第0个状态)

接下来是:

python manage.py migrate myappname
Run Code Online (Sandbox Code Playgroud)

为我创建了表格.

如果您不想回滚到初始(零)状态但是要说迁移号码0005(上次迁移有效),您可以改为:

python manage.py migrate --fake myappname 0005
Run Code Online (Sandbox Code Playgroud)

然后继续进行实际迁移:

python manage.py migrate myappname
Run Code Online (Sandbox Code Playgroud)

文档中的更多细节

  • 如果还没有的话,您还需要将模型设置为“托管 = True”! (2认同)

Lju*_*tel 16

在我的情况下,__init__.pyAPP/migrations /文件夹中缺少该文件.如果你没有,它只需要一个空__init__.py文件.


Jit*_*hin 9

在 models.py 中更改 Managed = True(如果设置为 False)

class Meta:
    managed = False
    db_table = 'table_name'
Run Code Online (Sandbox Code Playgroud)

class Meta:
    managed = True
    db_table = 'table_name'
Run Code Online (Sandbox Code Playgroud)


小智 5

我有一个类似的问题,只是想通了。我有多个数据库。我的本地(未更新的)是一个 MySQL 数据库。其他的是 MS SQL Server 和 MySQL。我有到其他数据库的路由器,因为我不管理它们并且(在 Django 1.6 中)使用路由器来指示 allow_sync() = False。在 1.7 中,我将其更改为 allow_migrate() = False。但我没有为本地数据库添加路由器。如果没有,默认值似乎是 allow_migrate() = False 。结果,迁移只是默默地失败了(参考:https : //docs.djangoproject.com/en/1.7/topics/db/multi-db/)。我为本地数据库添加了一个路由器,将 allow_migrate() 设置为返回 True,现在我的迁移实际上创建了我的表。


Vkr*_*ddy 5

我遇到了同样的问题。经过大量的挖掘,我找到了解决方案。我正在使用Django 1.11,

如果您想重新开始,

1)delete all the files in your migrations folder except __init__.py
2)drop database
3)create database
4)python makemigrations
5)python migrate
Run Code Online (Sandbox Code Playgroud)

如果您具有reset_db,则可以使用reset_db代替第二步和第三步。

python manage.py reset_db

  • 如果有很多应用程序,那么只有一个应用程序有麻烦,删除数据库不是一个好方法。 (4认同)

Jav*_*tes 5

我正在使用 MySQL 并在删除0001_initial.py迁移文件和所有从 DB 演变而来的自定义表以尝试重新生成它们后遇到此问题...

解决了这个问题,只需删除django_migrations表中的这些行...

在此处输入图片说明

之后,$ python manage.py migrate命令再次重新生成我的所有自定义表。


小智 5

我有类似的问题。我做了上面所说的一切,但没有任何效果。然后我意识到我没有在admin.py应用程序的文件中添加我的模型名称。

除了上述所有内容外,您还必须在admin.py文件中添加您的型号名称。你必须像这样添加它:

admin.site.register(model name)
Run Code Online (Sandbox Code Playgroud)