从 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 来自我的 类(尽管已创建迁移文件).所以我尝试删除迁移目录并重复 makemigrations
和 migrate
,但终端抛出了它:
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 进入与您的数据库完全相同的状态,然后才开始对您的模型进行更改。所以这些是步骤:
- 检查您的数据库是否没有
django-migrations
table,如果需要,请使用 SQL 将其删除。 (注意:我假设这个数据库不是由 Django 生成的,而你正在创建一个新的 Django 应用程序)
- 使用
inspectdb
创建您的模型。如果需要,重命名模型以具有正确的 CamelCase。如果重命名模型或字段会更改数据库中的 table 或列名称,请确保设置 db_table
(模型的 Meta
选项)和 db_column
(如字段属性)。
- 运行
manage.py makemigrations
。检查您的模型的迁移文件,以确保名称与您的数据库匹配。
- 对于您自己的应用程序,运行
manage.py migrate <app> --fake
。这会将迁移添加到您的数据库中的 django-migrations
table,就好像它们 运行 一样,而实际上 运行ning 它们。
- 然后 运行
manage.py migrate
创建提供的 django tables (auth
, contenttype
, session
等...)
- 现在您处于可以开始改变事物的状态。如果您更改模型并且 运行
makemigrations
它应该为您的更改创建一个迁移。
我走的路很奇怪,但这是环境造成的。
我必须通过 inspect_db 从现有的 postgres 数据库生成单个 models.py。
接下来我修复了一些字段(键有一些问题),并在这个项目中创建了 2 个应用程序。所以现在我有 3 models.py(它们被拆分 models.py,由 inspect_db 生成)。 managed = True
已添加。 类 与数据库中的链接和数据类型相同
接下来我希望将这个模型集成到现有数据库中。我进行了迁移,我进行了迁移,最后数据库只有系统 django tables(auth_、django_migrations 等)None 来自我的 类(尽管已创建迁移文件).所以我尝试删除迁移目录并重复 makemigrations
和 migrate
,但终端抛出了它:
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 进入与您的数据库完全相同的状态,然后才开始对您的模型进行更改。所以这些是步骤:
- 检查您的数据库是否没有
django-migrations
table,如果需要,请使用 SQL 将其删除。 (注意:我假设这个数据库不是由 Django 生成的,而你正在创建一个新的 Django 应用程序) - 使用
inspectdb
创建您的模型。如果需要,重命名模型以具有正确的 CamelCase。如果重命名模型或字段会更改数据库中的 table 或列名称,请确保设置db_table
(模型的Meta
选项)和db_column
(如字段属性)。 - 运行
manage.py makemigrations
。检查您的模型的迁移文件,以确保名称与您的数据库匹配。 - 对于您自己的应用程序,运行
manage.py migrate <app> --fake
。这会将迁移添加到您的数据库中的django-migrations
table,就好像它们 运行 一样,而实际上 运行ning 它们。 - 然后 运行
manage.py migrate
创建提供的 django tables (auth
,contenttype
,session
等...) - 现在您处于可以开始改变事物的状态。如果您更改模型并且 运行
makemigrations
它应该为您的更改创建一个迁移。