Jul*_*enD 2 django django-migrations
从现有数据库开始,我想更新它的架构。我改变了我的一个模型,然后运行
python manage.py makemigrations myapp
Run Code Online (Sandbox Code Playgroud)
它创建迁移,正确定义新表和列。示例输出:
Migrations for 'myapp':
0001_initial.py:
- Create model Foo
- Add field Bar
- ...
Run Code Online (Sandbox Code Playgroud)
然后我应用迁移:
python manage.py migrate --database mydb
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Operations to perform:
Apply all migrations: admin, myapp, contenttypes, sessions, auth
Running migrations:
Rendering model states... DONE
Applying admin.0002_logentry_remove_auto_add... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Run Code Online (Sandbox Code Playgroud)
它似乎奏效了。Git告诉我“mydb”对应的sqlite文件已经改变了。但是,它没有将我的新表和列放在里面,而是删除了内容,留下了带有旧架构的空表。
我究竟做错了什么 ?
如果您有一个没有应用迁移的旧数据库,您应该在initial migrations没有任何更改的情况下创建。这意味着如果您更改了“models.py”,则将其恢复为原始状态,然后运行:
python manage.py makemigrations myapp
Run Code Online (Sandbox Code Playgroud)
然后运行“假”迁移
python manage.py migrate --database mydb --fake-initial
Run Code Online (Sandbox Code Playgroud)
之后,您可以修改“models.py”并使用正常迁移。
| 归档时间: |
|
| 查看次数: |
6330 次 |
| 最近记录: |