【问题标题】:How to transfer data from old database to new modified database in django?如何在 django 中将数据从旧数据库传输到新修改的数据库?
【发布时间】:2021-08-30 23:35:03
【问题描述】:

我有旧的 django 项目和新的 django 项目。我从旧 django 的数据库中创建了 dump 文件。我还对表格进行了更改并创建了新表格。

现在我想将该转储文件加载到我的新 django 应用程序中。当我第一次迁移然后恢复数据或先恢复然后迁移时,我遇到了错误。 当我首先进行迁移时,它说表已经存在

当我先恢复时,它显示django.db.utils.ProgrammingError: relation "django_content_type" already exists 我使用migrate --fake 错误发生,但未在数据库中创建新表

我花了 3-4 天,但没有成功。

如果可以的话,请帮帮我。

PS:我的数据库是postgresql

【问题讨论】:

  • 是新数据库只包含新表还是您也向当前表添加了列?

标签: python-3.x django postgresql migration django-3.0


【解决方案1】:

不是简单的,需要一些人工干预,这取决于你将来想做什么

  • 如果数据库中已经存在的表具有稳定的设计并且不会更改,或者您可以使用 SQL 语句手动进行更改,然后将 managed = False 设置为模型的元数据,这将使 Django 跳过进行迁移对于那些模型

  • 如果您想在新项目中为所有模型保留迁移功能,那么这将更加复杂

    1. 删除所有迁移
    2. 你需要让你的模型等同于你的数据库,你可以为Users这样的新模型设置managed=False
    3. 运行python manage.py makemigrations,这将创建初始数据库的结构。
    4. 假运行迁移python manage.py migrate --fake
    5. dump django_migrations 表的记录
    6. 创建一个新的空迁移(使用--empty)并使用migrations.RunSQL()django_migrations 表的SQL 语句添加到其中
    7. 现在再次伪造,因此您可以跳过新的迁移。
    8. 现在您可以照常使用迁移了。

安装新数据库时,只需运行python manage.py migrate

【讨论】:

  • 我使用 managed=False 并遵循以下步骤 1) 恢复转储文件 2) 从 DB 中删除所有以前的迁移 3) 从文件中删除所有以前的迁移 4) makemigrations 5) migrate 6) migrate --假的对我有用。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 2018-06-25
  • 2018-04-14
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2018-12-15
相关资源
最近更新 更多