框架中最强大的工具之一 django 是其 orm 和迁移管理。当我们面对生产性环境时,我们将有几次执行迁移,以增加,删除或更改列,这会导致系统中不可用的列,并将包括该模型的新模型的新模型可满足。 p>
新的Django应用程序的实施流通常包含:
问题发生是因为 迁移的执行 和 新代码的执行> 当前代码 拍摄IntegrityError
,这段时间留下了所有不可用的数据记录。
要解决这个问题,我们有一些可以遵循的程序。
添加字段或表格
添加NULL
字段或新表格
- 以您的方式创建模型或列;
- 用
python manage.py makemigrations
; 生成各自的迁移
- 故障两个拉请请求,一个包含模型的更改,另一个包含各自迁移;
- 失败或植入£或da 拉请求作为Migrata£o;
- 在生产数据库中运行迁移。如果生产模型不指望这些字段是 ,则添加现场不应引起问题
- faile或 Merge 拉申请作为mudanáno Modelo;
- 随着模型的更改植入方式。从现在开始,将开始在新列中阅读和写作。
添加NOT NULL
字段
要开始添加字段 null ,首先按照上述步骤添加为 null
- 将模型中的列更改为koud4。确保您不使用零值插入或更新此字段;
- 用
python manage.py makemigrations
; 生成各自的迁移
- 故障两个拉请请求,一个包含模型的更改,另一个包含各自迁移;
- faile或 Merge 拉申请作为mudanáno Modelo;
- 随着模型的更改植入方式。从现在开始,将开始在新列中录制。
- 失败或植入£或da 拉请求作为Migrata£o;
- 在生产数据库中运行迁移。
将NOT NULL
添加到具有大量数据的桌子中
django迁移坚持认为,具有约束 NOT NULL
的列有一个默认值。该值将用于流行的迁移过程中的空列。更新的过程将在表中执行LOCK
,以供更新完成。对于少于100,000行的小表格,可能不会出现问题,使用更多数据的列,这可能会导致系统不可用。
为了避免这种行为,我们可以执行Migrações Não Atômicas,只需将atomic = False
属性添加到其迁移中,如以下示例。
from django.db import migrations
class Migration(migrations.Migration):
atomic = False
删除字段或表格
删除NULL
字段或表格
基本上,这是相同的添加过程,以略有不同顺序的步骤进行por。
- 删除所有使用模型或列的使用;
- 错误的实现一个仍具有要删除的列或模型的定义的版本,因为它没有更多的使用;
- 故障删除课程的列或模型;
- GRESH顶级五年的前五年,您会议示意您的会议 / li> / li>
- 植入模型更改的模型。确保您没有发生任何错误,因为仍然有一些不再存在的情况;
- faã§a或 Merge 给出了Migra㧧o;
- 植入迁移守则;
- 在数据库中运行迁移。
删除NOT NULL
字段
要删除空字段,首先您必须将其转换为空字段,然后按上述步骤删除空字段。将无效的空字段转换为空的步骤。
- 将您的字段更改为
null=True
; - 创建此更改的迁移;
- 创建两个拉动请求分开,一个用于模型的更改,另一个用于迁移;
- 进行合并并用迁移来实现拉的请求
- 在数据库中运行迁移;
- 错误和模型更改的实现;
- Execute os passos para remover um campo nulo