一日一技:如何让Django 的app migration重新与数据库同步

简介: 一日一技:如何让Django 的app migration重新与数据库同步

今天的文章,没有用过Django的同学可能难以理解我在说什么。但是如果你被Django的migration折腾过,那么你一定会感谢这篇文章。

当我们使用Django + MySQL开发网站服务的时候,我们应该始终使用Django来管理数据库,无论是增加字段,删除字段,修改字段,都应该直接修改Django工程 app里面对应的 models.py文件,不应该再手动直接修改数据库。

但这种理想的情况有时候会被打破。我最近遇到了这样一种情况:

出于安全考虑,我把线上的MySQL数据库禁用了 drop的权限。但由于我修改了 models.py文件中的字段,于是触发了 drop字段的操作,由于没有权限,导致Django在migration线上数据库的时候报错。

由于上线时间紧急,当时我直接通过执行SQL语句在线上MySQL中创建了对应的数据表和字段。

现在就出现问题了:

  1. 首先,Django的web服务能够正常工作,因为数据表是完全正确的。
  2. app的migration一共有10条,在进行到第6条的时候报错。剩下的4步无法继续执行。
  3. 数据库经过人工修改,看起来像是把所有migration都执行完的样子,但实际上最后4步是通过执行SQL语句手动创建的。
  4. 如果不增删改新的字段,那么到目前为止不会有什么问题。但是如果增加修改了新的字段,migration将会始终失败。除非每一次都手动修改数据库。

现在的情况就是数据库与Migration不一致,可以使用下面的命令重新同步migration和数据库。

# 清除迁移历史记录
python manage.py migrate --fake app_name zero
# 查看当前的migration进度,此时文件前的 [x] 变成了[ ]
python manage.py showmigrations app_name
#删除app-migrations下除__init__.py的其他文件
#执行makemigrations,程序会再次为这个app 生成 0001_initial.py 文件
python manage.py makemigrations app_name
# 把当前数据库的状态作为初始状态
python manage.py migrate --fake-initial app_name

从现在开始,你再次对数据库进行更改以后,重新make migration,所有新的操作都会基于当前的数据库状态继续进行,migration和数据库又重新同步了。

目录
相关文章
|
1月前
|
SQL 数据库 开发工具
实时计算 Flink版产品使用合集之数据库中有新增索引,同步任务没有报错,索引的变动是否有影响
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL 数据处理 数据库
实时计算 Flink版产品使用合集之同步数据库时,库名称变了,route只能到表级别,怎么解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
20天前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
76 0
|
1月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
SQL 关系型数据库 数据库
实时计算 Flink版产品使用问题之如何同步一个数据库的数据转换到另一个库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
21天前
|
SQL 关系型数据库 MySQL
sql数据库同步软件
SQL数据库同步软件有多种选择,以下是一些常见的工具: * SQL Data Compare:此工具可以帮助在SQL Server或Azure SQL数据库之间进行数据比较和同步。它能够自动检测
|
27天前
|
存储 缓存 NoSQL
Redis与数据库同步指南:订阅Binlog实现数据一致性
本文由开发者小米分享,探讨分布式系统中的一致性问题,尤其是数据库和Redis一致性。文章介绍了全量缓存策略的优势,如高效读取和稳定性,但也指出其一致性挑战。为解决此问题,提出了通过订阅数据库的Binlog实现数据同步的方法,详细解释了工作原理和步骤,并分析了优缺点。此外,还提到了异步校准方案作为补充,以进一步保证数据一致性。最后,提醒在实际线上环境中需注意日志记录、逐步优化和监控报警。
64 3
|
8天前
|
关系型数据库 MySQL API
实时计算 Flink版操作报错合集之同步MySQL数据到另一个MySQL数据库,第一次同步后源表数据发生变化时目标表没有相应更新,且Web UI中看不到运行的任务,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
9天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之在进行Oracle数据库的全量同步时,只同步了一条数据而源表实际上包含多条数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何SQL同步数据到Oracle数据库中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章