Python manage.py 迁移 --fake <appname> vs Python manage.py 迁移 --fake <appname> zero



当我运行python manage.py migrate --fake photos zero:

要执行的操作:
取消应用所有迁移:照片运行迁移:呈现模型状态…做
取消应用photos.0001_initial……伪造

在运行上述命令后,我运行python manage.py migrate,此时出现此错误。

Traceback:Traceback(最近一次调用):

文件"C: 用户… lib 网站 django db 后端 sqlite3 base.py",第411行,在execute中Database.Cursor返回。执行(自我,查询)

django.db.utils。OperationalError: table "photos_userphoto"已经存在

当我运行python manage.py migrate --fake photos:

要执行的操作:Apply all migration: photos Runningmigrations: application photos.0001_initial…伪造的应用photos.0002_auto_20210303_0120……伪造

运行上述命令后,我运行python manage.py migrate,这工作完美。

Running migrations:
Applying photos.0003_auto_20210303_0123... OK

所以我的问题是,python manage.py migrate --fake <appname>python manage.py migrate --fake <appname> zero之间有什么区别,为什么第一个命令会给我一个错误?

谢谢. .

你似乎对--fake标志有误解。根据文档--fake标志:

将迁移标记为目标迁移(遵循上述规则),但不实际运行SQL来更改您的数据库模式。

它还进一步指出,如果高级用户手动进行更改,则意味着它是针对高级用户的。基本上Django创建了一个表django_migrations来管理你的迁移。它将添加一个条目来标记是否应用了迁移。--fake所做的只是根据您指定的迁移向该表添加/删除条目。另外,zero表示撤销所有迁移。

python manage.py migrate --fake photos zero

上面的命令基本上意味着你对Django说:

我已经或将手动从数据库中删除(d)所有表等对于app photos

python manage.py migrate --fake <appname>

在上面的命令中,您没有指定迁移(在前面您指定了零),这意味着假设您指的是直到最近的迁移。对于--fake,这个命令的意思是:

我已经或将手动使数据库中的所有表等迁移到最近的一个。

根据我的理解,你只做了一些改变,想要更新你的数据库,为此你可以简单地写:

python manage.py migrate

相关内容

  • 没有找到相关文章

最新更新