【问题标题】:How to do django syncdb in version 1.4.2?如何在 1.4.2 版本中做 django syncdb?
【发布时间】:2015-05-22 03:38:57
【问题描述】:

如何在 django 1.4.2 中做同步数据库? 即数据库中有数据,当数据模式更新时如何再次加载模型?

提前致谢

【问题讨论】:

  • 如果您已经在数据库中有数据并且对模型进行了更改,并且希望根据您对模型的更改更新数据库架构同时仍然保留数据,那么您需要向南看迁移 (south.readthedocs.org/en/latest)
  • 较新版本的 django 默认集成了 south 模块。对于您的 django 版本,您需要安装 south 模块并将其放入您的 INSTALLED_APPS
  • Django 1.4 确实支持迁移。我有这个来源要验证,必须下载版本并再次检查,因为文档没有提供太多信息。 stackoverflow.com/questions/10834237/django-syncdb-and-migrate
  • @ArpitGoyal 查看 django 迁移文档docs.djangoproject.com/en/1.8/topics/migrations。该文档适用于 django > 1.7,因为 south 在 1.7 版中正式包含在 django 中
  • @ArpitGoyal South 实际上是 Django 的一部分,但它是一个单独的包。 1.7 在 Django 核心中引入了一个全新的迁移系统。

标签: python django django-models django-syncdb


【解决方案1】:

由于您使用的是旧版本的 django,您需要安装 South 模块并为您的应用进行迁移。

要安装 South,您可以使用 pipeasy_install

pip install South

安装完 south 模块后,将其放入 django 项目设置中的INSTALLED_APPS

INSTALLED_APPS = (
...
"south"
)

然后,您需要先为您的应用进行初始迁移。因此,对于名为 example 的应用程序,您可以运行以下命令:

python manage.py makemigrations example --initial
python manage.py migrate

在创建初始迁移后,您对模型进行更改,然后进行新的迁移并应用它们。

python manage.py makemigrations example --auto
python manage.py migrate

【讨论】:

    【解决方案2】:

    感谢 Amyth 的提示。
    顺便说一句,命令有点不同,我将在这里发布 10 倍的测试结果。

    使用南
    1. 设置模型

    python manage.py schemamigration models --initial

    1. 必要时转储数据

    python manage.py dumpdata -e contenttypes -e auth.Permission --natural > data.json

    1. 同步数据库

    python manage.py syncdb
    python manage.py migrate models

    1. 将数据加载回数据库

    python manage.py loaddata data.json

    1. 之后,您可以使用

    python manage.py schemamigration models --auto
    python manage.py migrate models

    每次更改模型架构后

    几点注意事项
    1. 卸载数据库并重新加载它是必不可少的,因为如果不这样做,第一次迁移会告诉你已经有了这些模型。
    2.dumpdata中的-e contenttypes -e auth.Permission --natural参数是必须的,否则加载数据时会抛出异常。

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2014-09-07
      相关资源
      最近更新 更多