南迁数据库:新增字段如何处理
Database migration with south: how to deal with added fields
我正在开发一个基于 Heroku 的 django 项目。随着项目的发展,在向数据模型添加新字段时会出现问题:在makemigration
期间,south
会询问类似以下内容:
...
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
...
解决这个问题并不容易(我尝试选择第二个答案,但 south
不接受我输入的任何内容)。
问题:
1)有人建议在新字段中加入null=True
,避免出现这样的问题。但是,该字段不应为 null
。我最终做了一个解决方法:makemigration
和 null=True
,删除 null=True
,再次执行 makemigration
,然后推送到 Heroku。
这是正确的做法吗?
2)使用南迁又会出现问题。因为我们是一个开发团队,每个成员都可以在his/her环境中进行迁移。在推送到 GitHub 时,每个应用程序的 migration
文件夹中的 00*_*
文件可能会相互冲突。如何解决?目前,我们只是忽略 00*_*
文件,因为我们的项目尚未投入生产。如果以后生产呢?
3) 我只用过运行 makemigrations
和migrate
从未用过schemamigration
。不过系统 运行 没问题。我必须 运行 schemamigration
吗?
1)
当您收到这样的错误消息时,基本上是在请求一次性默认设置。选择选项 2 时究竟应该在其中输入什么完全取决于您的情况,但它必须是有效的 Python 表达式。例如:
- 如果我有一个要添加的 IntegerField,我可以输入
0
- 对于 CharField,我可以使用
"my string"
(注意必须有引号)
- 对于外键,我会指定我要使用的对象的主键。
2)
这是南方最难的部分。必须手动合并冲突的迁移。取代 South 的 Django 1.7 迁移更擅长自动执行此操作,因此如果可能的话,请升级到 1.7+。
3)
我相信 makemigrations
是 schemamigration
的别名。习惯 makemigrations
因为这是 Django 1.7+ 中调用的命令。
我正在开发一个基于 Heroku 的 django 项目。随着项目的发展,在向数据模型添加新字段时会出现问题:在makemigration
期间,south
会询问类似以下内容:
...
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
...
解决这个问题并不容易(我尝试选择第二个答案,但 south
不接受我输入的任何内容)。
问题:
1)有人建议在新字段中加入null=True
,避免出现这样的问题。但是,该字段不应为 null
。我最终做了一个解决方法:makemigration
和 null=True
,删除 null=True
,再次执行 makemigration
,然后推送到 Heroku。
这是正确的做法吗?
2)使用南迁又会出现问题。因为我们是一个开发团队,每个成员都可以在his/her环境中进行迁移。在推送到 GitHub 时,每个应用程序的 migration
文件夹中的 00*_*
文件可能会相互冲突。如何解决?目前,我们只是忽略 00*_*
文件,因为我们的项目尚未投入生产。如果以后生产呢?
3) 我只用过运行 makemigrations
和migrate
从未用过schemamigration
。不过系统 运行 没问题。我必须 运行 schemamigration
吗?
1) 当您收到这样的错误消息时,基本上是在请求一次性默认设置。选择选项 2 时究竟应该在其中输入什么完全取决于您的情况,但它必须是有效的 Python 表达式。例如:
- 如果我有一个要添加的 IntegerField,我可以输入
0
- 对于 CharField,我可以使用
"my string"
(注意必须有引号) - 对于外键,我会指定我要使用的对象的主键。
2) 这是南方最难的部分。必须手动合并冲突的迁移。取代 South 的 Django 1.7 迁移更擅长自动执行此操作,因此如果可能的话,请升级到 1.7+。
3)
我相信 makemigrations
是 schemamigration
的别名。习惯 makemigrations
因为这是 Django 1.7+ 中调用的命令。