首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何恢复上次迁移?

如何恢复上次迁移?
EN

Stack Overflow用户
提问于 2015-08-21 00:24:31
回答 10查看 303.5K关注 0票数 603

我进行了一次迁移,添加了一个新表,并希望恢复并删除迁移,而不创建新的迁移。

我该怎么做呢?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?

EN

回答 10

Stack Overflow用户

发布于 2016-07-14 09:09:31

Alasdair的答案涵盖了基础知识

通过以下方式确定您想要的迁移

使用应用程序名称和迁移名称

但应该指出的是,并不是所有的迁移

可以

被颠倒。如果Django没有反转规则,就会发生这种情况。对于您通过以下方式自动进行迁移的大多数更改

,反转将是可能的。但是,自定义脚本需要同时编写正向和反向代码,如下面的示例所述:

https://docs.djangoproject.com/en/1.9/ref/migration-operations/

如何进行无操作反转

如果你有一个

操作,那么您可能只想退出迁移,而不是编写逻辑上严格的反转脚本。文档(上面的链接)中对示例的以下快速修改允许这样做,使数据库处于应用迁移后的相同状态,即使在反向迁移之后也是如此。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

def forwards_func(apps, schema_editor):
    # We get the model from the versioned app registry;
    # if we directly import it, it'll be the wrong version
    Country = apps.get_model("myapp", "Country")
    db_alias = schema_editor.connection.alias
    Country.objects.using(db_alias).bulk_create([
        Country(name="USA", code="us"),
        Country(name="France", code="fr"),
    ])

class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.RunPython(forwards_func, lambda apps, schema_editor: None),
    ]

这适用于Django 1.8、1.9

更新:写这篇文章的更好的方法是用

使用

在上面的代码片段中。这两者在功能上是一样的。(评论的功劳)

票数 43
EN

Stack Overflow用户

发布于 2020-01-16 06:22:03

在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。

代码语言:javascript
复制
python manage.py showmigrations
python manage.py migrate {app name from show migrations} {00##_migration file.py}

如果要恢复所有迁移

,使用

作为迁移的名称:

代码语言:javascript
复制
python manage.py migrate app_name_here zero

删除迁移文件。一旦所需的迁移在您的模型中...

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate
票数 36
EN

Stack Overflow用户

发布于 2017-06-04 01:13:18

这是我的解决方案,因为上面的解决方案并没有真正涵盖使用案例,当您使用

..。

您可以使用以下命令通过ORM访问表

代码语言:javascript
复制
from django.db.migrations.recorder import MigrationRecorder

>>> MigrationRecorder.Migration.objects.all()
>>> MigrationRecorder.Migration.objects.latest('id')
Out[5]: 
>>> MigrationRecorder.Migration.objects.latest('id').delete()
Out[4]: (1, {u'migrations.Migration': 1})

因此,您可以查询表并删除与您相关的条目。通过这种方式,您可以对其进行详细的修改。使用

迁移您还需要处理添加/更改/删除的数据。上面的示例仅显示了如何通过Djang ORM访问表。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32123477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档