Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
恢复已删除的Django迁移_Django_Postgresql_Migration_Webfaction - Fatal编程技术网

恢复已删除的Django迁移

恢复已删除的Django迁移,django,postgresql,migration,webfaction,Django,Postgresql,Migration,Webfaction,在我的生产服务器上,我不小心删除了我的一个应用程序中的迁移目录。多人在应用程序上工作,因此在制作应用程序时,我们所做的是在不进行任何本地迁移的情况下推进模型更改,然后在生产服务器上进行迁移,然后迁移到那里。我们这样做是因为我们在过去遇到了迁移合并问题,并且认为这可能是一个好的解决方案。由于没有迁移文件夹的本地副本,我担心它将永远消失。我的问题是。我可以在WebPaction中访问phpPgAdmin,数据库有一个django_迁移表。我认为一个解决方案是找到最新的迁移,比如说0009_migra

在我的生产服务器上,我不小心删除了我的一个应用程序中的迁移目录。多人在应用程序上工作,因此在制作应用程序时,我们所做的是在不进行任何本地迁移的情况下推进模型更改,然后在生产服务器上进行迁移,然后迁移到那里。我们这样做是因为我们在过去遇到了迁移合并问题,并且认为这可能是一个好的解决方案。由于没有迁移文件夹的本地副本,我担心它将永远消失。我的问题是。我可以在WebPaction中访问phpPgAdmin,数据库有一个django_迁移表。我认为一个解决方案是找到最新的迁移,比如说0009_migration.py,而不是简单地重命名一个新的迁移文件0010_migration.py,以便将来在该应用程序中进行任何模型更改时进行下一次迁移。这样我就可以简单地运行migrate,并且只考虑它尚未运行的迁移0010_migration.py。但出于好奇,是否有一些命令可以查看您的PostgreSQL数据库,并根据django_migrations表中的迁移记录在app migrations目录中创建迁移文件

我想一个更简单的问题是,有没有办法将django_migrations表行反向工程到migrations.py文件中?这是我在PostgreSQL中拥有的django_迁移表行的图像,以及我希望该文件的外观,只是使用不同的命令

Django迁移

class Migration(migrations.Migration):

    dependencies = [
        ('portfolio', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='project',
            name='contact_form',
            field=models.BooleanField(default=False),
        ),
    ]
PostgreSQL django_迁移表行

1从数据库的迁移表中删除迁移文件已删除的应用程序的所有实体

2$python manage.py makemigrations

这将创建一个新的迁移文件—初始迁移

3$python manage.py迁移-假

将初始迁移写入迁移表,但不接触任何其他实际不迁移的表

只要迁移文件被删除的应用程序没有任何更改,这应该可以正常工作

这可能会解决在假定迁移文件是由manage.py自动创建且未经操作的情况下意外删除迁移文件的问题。但我不知道是否能够重构迁移表,或者是否建议重构迁移表——这也可能导致调整迁移文件的自动创建,需要在自动创建迁移文件后手动操作任何迁移文件,甚至需要覆盖django后端

编辑 对评论中附加问题的答复:

初始$python manage.py makemigrations创建一个迁移文件,该文件描述给定应用程序中所有模型的当前模式$python manage.py makemigrations对所有应用程序都这样做。 初始$python manage.py migrate将给定应用程序的所有迁移文件应用到数据库,并将应用了哪些迁移文件写入迁移表。在初始迁移时,将创建具有所需属性和关系的所有所需数据库表$python manage.py migrate为所有应用程序执行此操作。 在$python manage.py makemigrations之后,将创建描述最新迁移文件之间差异的迁移文件,以便在此应用程序中提供模型架构的最新描述和此应用程序中模型的当前架构。 数据库的迁移表仅包含有关哪些应用程序的迁移文件已应用于数据库的信息。 下面的$python manage.py migrate将使用该迁移表检查哪些迁移文件已应用于数据库。如果存在未应用的迁移文件,则将应用这些文件,然后将其写入迁移表。 因此,如果删除某个应用程序的迁移文件,只需删除该应用程序的模型模式的描述和历史记录。迁移表中的条目也是如此:只需删除有关哪些迁移文件应用于数据库的信息

$manage.py migrate-false还检查必须应用于数据库的迁移文件,并将所有要应用于迁移表的迁移文件写入。但此命令不会将它们应用于数据库。 因此,我建议的实际解决方案是:

删除有关将哪些迁移文件应用于某个特定应用程序的数据库的信息 创建该应用程序的一个新迁移文件
将迁移文件写入迁移表,但不应用它 1从数据库的迁移表中删除迁移文件已删除的应用程序的所有实体

2$python manage.py makemigrations

这将创建一个新的迁移文件—初始迁移

3$python manage.py迁移-假

将初始迁移写入迁移表,但不接触任何其他实际不迁移的表

只要你愿意,那就行了 迁移文件已删除的应用程序未发生任何更改

这可能会解决在假定迁移文件是由manage.py自动创建且未经操作的情况下意外删除迁移文件的问题。但我不知道是否能够重构迁移表,或者是否建议重构迁移表——这也可能导致调整迁移文件的自动创建,需要在自动创建迁移文件后手动操作任何迁移文件,甚至需要覆盖django后端

编辑 对评论中附加问题的答复:

初始$python manage.py makemigrations创建一个迁移文件,该文件描述给定应用程序中所有模型的当前模式$python manage.py makemigrations对所有应用程序都这样做。 初始$python manage.py migrate将给定应用程序的所有迁移文件应用到数据库,并将应用了哪些迁移文件写入迁移表。在初始迁移时,将创建具有所需属性和关系的所有所需数据库表$python manage.py migrate为所有应用程序执行此操作。 在$python manage.py makemigrations之后,将创建描述最新迁移文件之间差异的迁移文件,以便在此应用程序中提供模型架构的最新描述和此应用程序中模型的当前架构。 数据库的迁移表仅包含有关哪些应用程序的迁移文件已应用于数据库的信息。 下面的$python manage.py migrate将使用该迁移表检查哪些迁移文件已应用于数据库。如果存在未应用的迁移文件,则将应用这些文件,然后将其写入迁移表。 因此,如果删除某个应用程序的迁移文件,只需删除该应用程序的模型模式的描述和历史记录。迁移表中的条目也是如此:只需删除有关哪些迁移文件应用于数据库的信息

$manage.py migrate-false还检查必须应用于数据库的迁移文件,并将所有要应用于迁移表的迁移文件写入。但此命令不会将它们应用于数据库。 因此,我建议的实际解决方案是:

删除有关将哪些迁移文件应用于某个特定应用程序的数据库的信息 创建该应用程序的一个新迁移文件
将迁移文件写入迁移表,但不应用它。谢谢Max,这不会影响我正在删除django_migrations行的应用程序的现有数据或模型模式。简单的答案是肯定的。我将在回答中详细说明。谢谢Max,这不会影响我正在删除django_migrations行的应用程序的现有数据或模型架构。简单的回答是肯定的。我会在回答中详细说明。说真的,以后不要这样做。迁移是代码库的一部分,需要进行版本控制。我同意Daniel,这是我们黑暗过去的一部分,我们都从错误中吸取了教训,在这种情况下,迁移仍然困扰着我们。说真的,以后不要这样做。迁移是代码库的一部分,需要进行版本控制。我同意Daniel,这是我们黑暗过去的一部分,我们都从错误中吸取了教训,在这种情况下,我们仍然被它困扰着。