从 django 到 postgres DB 的奇怪迁移。如何保存现有数据

strange migration from django to postgres DB. How to save an exist data

我走的路很奇怪,但这是环境造成的。 我必须通过 inspect_db 从现有的 postgres 数据库生成单个 models.py。 接下来我修复了一些字段(键有一些问题),并在这个项目中创建了 2 个应用程序。所以现在我有 3 models.py(它们被拆分 models.py,由 inspect_db 生成)。 managed = True 已添加。 类 与数据库中的链接和数据类型相同 接下来我希望将这个模型集成到现有数据库中。我进行了迁移,我进行了迁移,最后数据库只有系统 django tables(auth_、django_migrations 等)None 来自我的 类(尽管已创建迁移文件).所以我尝试删除迁移目录并重复 makemigrationsmigrate,但终端抛出了它:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.
(forest-venv) user@user-HP-Z800-Workstation ~/MyProjects/forest-venv/lesoved $ python manage.py runserver 8001
Performing system checks...

如果我再次尝试进行迁移 - 没有任何变化。我尝试在 django_migrations table 中删除有关我的应用程序的信息 - 没有结果。

所以我的问题是: - 可以将新模型集成到现有数据库中(如果名称、密钥和格式都可以)? - 可以通过迁移后保存现有数据库中的数据的方式进行集成吗? - 如何return 进行迁移的可能性?现在不行了。

使用现有数据库的诀窍是确保您从定义明确的状态开始:首先让 Django 进入与您的数据库完全相同的状态,然后才开始对您的模型进行更改。所以这些是步骤:

  1. 检查您的数据库是否没有 django-migrations table,如果需要,请使用 SQL 将其删除。 (注意:我假设这个数据库不是由 Django 生成的,而你正在创建一个新的 Django 应用程序)
  2. 使用 inspectdb 创建您的模型。如果需要,重命名模型以具有正确的 CamelCase。如果重命名模型或字段会更改数据库中的 table 或列名称,请确保设置 db_table(模型的 Meta 选项)和 db_column(如字段属性)。
  3. 运行manage.py makemigrations。检查您的模型的迁移文件,以确保名称与您的数据库匹配。
  4. 对于您自己的应用程序,运行 manage.py migrate <app> --fake。这会将迁移添加到您的数据库中的 django-migrations table,就好像它们 运行 一样,而实际上 运行ning 它们。
  5. 然后 运行 manage.py migrate 创建提供的 django tables (auth, contenttype, session 等...)
  6. 现在您处于可以开始改变事物的状态。如果您更改模型并且 运行 makemigrations 它应该为您的更改创建一个迁移。