在Django 1.9中,我应该使用什么来代替syncdb?


70

看看这个:

$ 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)

我运行了一个快速的Google搜索,但找不到答案-我应该用什么代替syncdb


2
实际上,现在我再看一次,就在这里:syncdb has been deprecated and replaced by migrate
d33tah 2015年

Answers:


89

syncdb由于django 1.7引入的迁移系统而被弃用。

现在,您可以使用跟踪更改makemigrations。这会将您的模型更改转换为python代码,以使其可部署到另一个数据库。当您需要对数据库进行进一步的修改时,可以使用数据迁移

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

因此,除了使用之外,syncdb您还应该使用makemigrations然后migrate

更改模型中的某些内容后,开发工作流程如下:

./manage.py makemigrations
./manage.py migrate

在您的生产系统上:

./manage.py migrate

奖励:您无需migrate为每次更改都运行。如果您尚未应用多个更改,django将按照正确的顺序运行它们。


2
这是最好的新功能;)
tgdn 2015年

9
注意:makemigrations可能需要模块名称作为参数。
d33tah 2015年

1
这是可怕的建议。如果要安装要迁移到空白数据库的应用程序,则永远不要运行,migrate因为这将浪费大量时间。@Don Mums的答案是正确的答案。
Cerin

56

您一定要使用迁移系统。通过它可以跟踪中的更改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

在Django 1.9.1上测试。


10
+1为实际解决方案,这应该是答案。从头开始积极开发时,虽然应该在生产版本中使用迁移,但擦除数据库并重新开始要比运行500个迁移要容易得多。dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb进行更改时,我会定期跑步。
dotcomly

--run-syncdb似乎只能在没有迁移的应用上使用。我使用了以下解决方法: find -name "migrations" -exec mv {}/__init__.py {}/__init__ \; && python manage.py migrate && python manage.py migrate --run-syncdb && find -name "migrations" -exec mv {}/__init__ {}/__init__.py \; && python manage.py migrate --fake
libcthorne


3

syncdb数据库迁移有一些问题。因此,在Django 1.7makemigrations和之后的版本migrate中已经引入。现在在djangosyncdb中已弃用1.9 。尝试
1.python manage.py makemigrations在dbs.py迁移文件夹中检测到db中的更改并创建一个文件2.python manage.py migrate将迁移应用到数据库

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.