python manage.py migrate --fake <appname> vs python manage.py migrate --fake <appname> 零
python manage.py migrate --fake <appname> vs python manage.py migrate --fake <appname> zero
当我 运行 python manage.py migrate --fake photos zero
:
Operations to perform:
Unapply all migrations: photos
Running migrations: Rendering model states... DONE
Unapplying
photos.0001_initial... FAKED
在运行ning上面的命令后,我运行python manage.py migrate
当时就出现了这个错误。
Traceback:Traceback (most recent call last):
File
"C:\Users...\lib\site-packages\django\db\backends\sqlite3\base.py",
line 411, in execute
return Database.Cursor.execute(self, query)
django.db.utils.OperationalError: table "photos_userphoto" already
exists
当我运行python manage.py migrate --fake photos
:
Operations to perform: Apply all migrations: photos Running
migrations: Applying photos.0001_initial... FAKED Applying
photos.0002_auto_20210303_0120... FAKED
在 运行 上面的命令之后,我 运行 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
标志有误解。根据 documentation --fake
标志:
Marks the migrations up to the target one (following the rules above)
as applied, but without actually running the SQL to change your
database schema.
它还进一步指出,它适用于手动进行更改的高级用户。基本上 Django 使用 table django_migrations
来管理你的迁移。它向其中添加一个条目以标记是否已应用迁移。 --fake
所做的只是根据您指定的迁移向 table 添加条目/从中删除条目。另外 zero
表示撤消所有迁移。
python manage.py migrate --fake photos zero
上面的命令意味着你基本上对 Django 说:
I have or will manually remove(d) all the tables, etc. from the database
for the app photos
python manage.py migrate --fake <appname>
在上面的命令中你没有指定迁移(之前你指定了零),这意味着假设你的意思是直到最近的迁移。基本上 --fake
这个命令意味着:
I have or will manually make all the tables, etc. in the database for
the migrations till the most recent one.
根据我的理解,您只做了一些更改并想更新您的数据库,为此您可以简单地写成:
python manage.py migrate
当我 运行 python manage.py migrate --fake photos zero
:
Operations to perform:
Unapply all migrations: photos Running migrations: Rendering model states... DONE
Unapplying photos.0001_initial... FAKED
在运行ning上面的命令后,我运行python manage.py migrate
当时就出现了这个错误。
Traceback:Traceback (most recent call last):
File "C:\Users...\lib\site-packages\django\db\backends\sqlite3\base.py", line 411, in execute return Database.Cursor.execute(self, query)
django.db.utils.OperationalError: table "photos_userphoto" already exists
当我运行python manage.py migrate --fake photos
:
Operations to perform: Apply all migrations: photos Running migrations: Applying photos.0001_initial... FAKED Applying photos.0002_auto_20210303_0120... FAKED
在 运行 上面的命令之后,我 运行 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
标志有误解。根据 documentation --fake
标志:
Marks the migrations up to the target one (following the rules above) as applied, but without actually running the SQL to change your database schema.
它还进一步指出,它适用于手动进行更改的高级用户。基本上 Django 使用 table django_migrations
来管理你的迁移。它向其中添加一个条目以标记是否已应用迁移。 --fake
所做的只是根据您指定的迁移向 table 添加条目/从中删除条目。另外 zero
表示撤消所有迁移。
python manage.py migrate --fake photos zero
上面的命令意味着你基本上对 Django 说:
I have or will manually remove(d) all the tables, etc. from the database for the app photos
python manage.py migrate --fake <appname>
在上面的命令中你没有指定迁移(之前你指定了零),这意味着假设你的意思是直到最近的迁移。基本上 --fake
这个命令意味着:
I have or will manually make all the tables, etc. in the database for the migrations till the most recent one.
根据我的理解,您只做了一些更改并想更新您的数据库,为此您可以简单地写成:
python manage.py migrate