在Django 1.9中我应该使用什么而不是syncdb?

d33*_*tah 68 python django django-1.8

看看这个:

$ pypy ./manage.py syncdb
/usr/lib64/pypy-2.4.0/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)

(cut)
Run Code Online (Sandbox Code Playgroud)

我跑了一个快速的谷歌搜索,但找不到答案 - 我应该使用什么而不是syncdb

tja*_*ati 87

syncdbdjango 1.7引入的迁移系统而被弃用.

现在,您可以使用跟踪更改makemigrations.这会将您的模型更改转换为python代码,以使它们可以部署到另一个数据库.如果需要进一步修改,则需要应用于数据库,可以使用数据迁移.

创建迁移后,您必须应用它们:migrate.

所以不要使用syncdb你应该使用makemigrations然后migrate.

在模型中更改了某些内容后的开发工作流程:

./manage.py makemigrations
./manage.py migrate
Run Code Online (Sandbox Code Playgroud)

在您的生产系统上:

./manage.py migrate
Run Code Online (Sandbox Code Playgroud)

额外奖励:您不需要migrate为每次更改而竞争.如果您还没有应用多个更改,那么django将以正确的顺序运行它们.

  • 注意:`makemigrations`可能需要模块名称作为参数. (9认同)
  • 这是最好的新功能;) (2认同)

Don*_*ums 51

你绝对应该使用迁移系统.这使您可以跟踪您的更改models.py,并为数据库创建迁移.迁移系统使用这些命令makemigrations来创建迁移和migrate迁移数据库.

如果由于某种原因你需要以相同的方式创建数据库syncdb,那么命令标志会导致migrate以相同的方式工作.如果你真的需要它而且你知道自己在做什么,那么你应该这样做.例如,为您选择的持续集成系统创建一个空数据库.

python manage.py migrate auth
# performs migrations for auth and contenttypes contrib apps

python manage.py migrate --run-syncdb
# creates the rest of the database
Run Code Online (Sandbox Code Playgroud)

在Django 1.9.1上测试过.

  • 对于实际解决方案+1,这应该是答案.虽然在从头开始积极开发时应该使用迁移用于生产版本,但是更容易消除数据库并重新启动而不是运行500次迁移.每当我进行更改时,我都会定期运行`dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb`. (10认同)

diz*_*nze 9

您应该使用django 1.7中引入的makemigrationsmigrate命令

https://docs.djangoproject.com/en/1.7/topics/migrations/