Django 迁移中会删除数据的危险命令

Django 迁移中会删除数据的危险命令及操作

在 Django 迁移系统中,以下命令和操作会直接或间接删除数据库表数据,属于高风险操作,在生产环境中必须谨慎使用:

1. 会删除数据的迁移命令

直接删除数据的命令

  • migrate zero (回滚所有迁移)

    bash 复制代码
    python manage.py migrate app_name zero

    → 会删除指定应用的所有表及其数据(按迁移反向操作)

  • flush (清空数据库)

    bash 复制代码
    python manage.py flush

    → 删除所有表中的所有数据(保留表结构)

危险组合命令

  • reset_db (Django-extensions 提供)

    bash 复制代码
    python manage.py reset_db

    → 完全重置数据库(删除所有表和数据)

安全操作建议

  1. 必须执行的预防措施

    bash 复制代码
    # 执行前先备份数据库
    python manage.py dumpdata > backup.json
    # 或使用数据库原生工具
    pg_dump mydb > backup.sql
  2. 替代方案

    • 使用软删除(添加 is_deleted 字段)而非物理删除
    • 先归档数据再执行删除操作
    • 使用 db_table 重命名而非删除表
  3. 检查迁移影响

    bash 复制代码
    # 查看将执行的SQL(不实际执行)
    python manage.py sqlmigrate app_name migration_number
    
    # 查看迁移计划
    python manage.py migrate --plan
  4. 生产环境操作流程

    1. 在测试环境验证迁移
    2. 备份生产数据库
    3. 在维护窗口期执行
    4. 准备回滚方案
    5. 监控执行过程

重要提醒:任何包含 DeleteModelRemoveFieldRunPython/RunSQL 中有删除操作的迁移文件,都应视为高风险迁移,必须经过严格审查才能在生产环境执行。

相关推荐
Databend9 小时前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
兵慌码乱2 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
呱呱复呱呱2 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
Nturmoils2 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
兵慌码乱3 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
倔强的石头_4 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_7 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库