<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django模型遷移指南:從命令用法到最佳實(shí)踐

      一、遷移的工作原理

      Django 遷移系統(tǒng)本質(zhì)上是一套數(shù)據(jù)庫版本控制系統(tǒng),它通過以下三個(gè)核心環(huán)節(jié)實(shí)現(xiàn)模型與數(shù)據(jù)庫的同步

      • 生成遷移文件:當(dāng)模型發(fā)生變更時(shí),makemigrations 命令會(huì)生成記錄變更的 Python 腳本,存儲在應(yīng)用的 migrations/ 目錄下
      your_app/
      └── migrations/
          ├── 0001_initial.py  # 初始遷移文件
          └── 0002_auto_20250606_1006.py  # 自動(dòng)生成的遷移文件
      
      • 應(yīng)用遷移文件:運(yùn)行migrate 命令會(huì)按順序執(zhí)行遷移文件,并通過數(shù)據(jù)庫中的 django_migrations 表記錄執(zhí)行狀態(tài),確保每個(gè)遷移只被執(zhí)行一次

      image-20250606100932629

      • 回滾遷移操作:支持將數(shù)據(jù)庫狀態(tài)回滾到指定的歷史版本,可通過指定遷移編號或 zero 實(shí)現(xiàn)完全回滾

      二、生成遷移文件:makemigrations

      基本用法

      修改模型后(比如添加字段、刪除模型、修改字段類型等),使用以下命令生成遷移文件

      # 為指定應(yīng)用生成遷移
      python manage.py makemigrations your_app_name
      
      # 為所有應(yīng)用生成遷移
      python manage.py makemigrations
      

      實(shí)用選項(xiàng)

      預(yù)覽遷移內(nèi)容:不實(shí)際創(chuàng)建文件,僅查看變更內(nèi)容

      python manage.py makemigrations --dry-run
      

      解決遷移沖突:多開發(fā)者協(xié)作時(shí)合并遷移歷史

      python manage.py makemigrations --merge
      

      遷移文件解釋

      遷移文件是自動(dòng)生成的 Python 腳本,通常位于每個(gè) app 的 migrations/ 文件夾下

      your_app/
      └── migrations/
          ├── 0001_initial.py
          └── 0002_auto_20250606_1006.py
      
      

      文件主要內(nèi)容包括

      • 遷移依賴關(guān)系(dependencies
      • 操作列表(operations):記錄字段添加、刪除、類型修改等具體變更
      # 遷移文件示例
      # Generated by Django 4.2.20 on 2025-07-15 08:22
      
      from django.conf import settings
      from django.db import migrations, models
      import django.db.models.deletion
      
      
      class Migration(migrations.Migration):
      
          dependencies = [
              ('myapp_system', '0001_initial'),
          ]
      
          operations = [
              migrations.AlterField(
                  model_name='systemnotifymessage',
                  name='user_id',
                  field=models.ForeignKey(db_column='user_id', db_comment='接收用戶ID', db_constraint=False, help_text='接收用戶ID', on_delete=django.db.models.deletion.DO_NOTHING, related_name='notify_messages', to=settings.AUTH_USER_MODEL),
              ),
          ]
      

      點(diǎn)擊查看遷移文件完整代碼

      三、應(yīng)用遷移:migrate

      基礎(chǔ)用法

      使用場景

      • 第一次運(yùn)行 Django 項(xiàng)目之前
      • 修改了 models.py 中的模型定義
      • 添加了第三方 Django 應(yīng)用
      # 應(yīng)用所有未執(zhí)行的遷移
      python manage.py migrate
      
      # 僅應(yīng)用指定應(yīng)用的遷移
      python manage.py migrate myapp
      
      # 應(yīng)用到指定版本的遷移
      python manage.py migrate myapp 0001
      

      特殊場景處理

      初始化已有數(shù)據(jù)庫:當(dāng)數(shù)據(jù)庫表結(jié)構(gòu)已存在時(shí),使用假造 - fake-initial` 選項(xiàng)跳過初始遷移

      python manage.py migrate --fake-initial
      

      查看遷移狀態(tài):檢查哪些遷移已應(yīng)用,哪些未應(yīng)用

      python manage.py showmigrations
      

      四、遺留數(shù)據(jù)庫集成:inspectdb

      當(dāng)需要將 Django 與遺留數(shù)據(jù)庫集成時(shí),inspectdb工具能幫我們自動(dòng)生成模型代碼,省去手動(dòng)編寫的麻煩。

      基本用法

      # 查看生成的模型代碼
      python manage.py inspectdb
      
      # 將模型代碼保存到文件
      python manage.py inspectdb > my_models.py
      
      # 為特定表生成模型
      python manage.py inspectdb auth_user
      

      注意事項(xiàng)

      使用重定向生成文件時(shí),默認(rèn)編碼可能為 UTF-16 LE,導(dǎo)致 Django 無法識別,解決方法有兩種:

      • 手動(dòng)創(chuàng)建 Python 文件并復(fù)制內(nèi)容
      • 使用 VSCode 打開文件,通過 "選擇編碼" 功能重新保存為 UTF-8

      五、遷移回滾

      回滾前的準(zhǔn)備工作

      查看當(dāng)前遷移狀態(tài)

      python manage.py showmigrations [app_name]
      
      # 帶 [X] 標(biāo)記的表示已應(yīng)用的遷移,例如:
      myapp
        [X] 0001_initial
        [X] 0002_add_email_field
        [X] 0003_add_age_field
      

      回滾前務(wù)必備份數(shù)據(jù)庫,以防意外發(fā)生

      # MySQL 數(shù)據(jù)庫備份示例
      mysqldump -u username -p dbname > backup_before_rollback.sql
      

      回滾操作方法

      回滾到指定遷移版本

      # 語法:python manage.py migrate [app_name] [遷移編號]
      
      # 示例:將 myapp 應(yīng)用回滾到 0001 版本
      python manage.py migrate myapp 0001
      

      完全回滾(清空所有遷移)

      # 完全回滾 myapp 應(yīng)用的所有遷移
      python manage.py migrate myapp zero
      

      回滾操作過程

      • 檢查目標(biāo)遷移版本與當(dāng)前版本的差異
      • 自動(dòng)生成反向 SQL 語句(基于遷移文件中的 operations)
      • 執(zhí)行反向操作并更新 django_migrations 表記錄
      • 不會(huì)刪除遷移文件,只是標(biāo)記其為未執(zhí)行狀態(tài)

      六、最佳實(shí)踐

      • 每次模型變更后生成并測試遷移
      • 遷移文件應(yīng)納入版本控制
      • 生產(chǎn)環(huán)境執(zhí)行遷移前先在測試環(huán)境驗(yàn)證
      • 復(fù)雜變更建議分步驟進(jìn)行,避免一次性大規(guī)模遷移
      • 謹(jǐn)慎使用回滾操作,先在測試環(huán)境驗(yàn)證回滾流程,再操作生產(chǎn)環(huán)境

      您正在閱讀的是《Django從入門到實(shí)戰(zhàn)》專欄!關(guān)注不迷路~

      posted @ 2025-07-31 10:47  小王子1024  閱讀(276)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩中文字幕一区二区不卡| 亚洲中文无码永久免费| 无码精品人妻一区二区三区湄公河| 无码日韩精品一区二区免费| 色99久久久久高潮综合影院 | 欧美日韩一区二区三区视频播放| 色欲久久综合亚洲精品蜜桃| 亚洲国产精品综合久久2007| 337p粉嫩大胆色噜噜噜| 精品午夜福利短视频一区| 人人人澡人人肉久久精品| 少妇无码AV无码专区| 国产日韩精品中文字幕| 人妻一区二区三区人妻黄色| 377P欧洲日本亚洲大胆| 龙井市| 日韩精品中文字幕人妻| 少妇伦子伦精品无吗| 亚洲精品无码你懂的网站| 久久人妻无码一区二区三区av| 91亚洲国产成人精品福利| 亚洲精品成人一二三专区| 国产亚洲av产精品亚洲| 老色鬼在线精品视频在线观看| 久久婷婷综合色一区二区| AV秘 无码一区二| 国产成人亚洲精品青草天美| 国产香蕉97碰碰久久人人| 国产台湾黄色av一区二区| 国产精品色呦呦在线观看| 欧美精品v国产精品v日韩精品| 亚洲五月丁香综合视频| 色综合久久久久综合99 | 久久亚洲综合精品成人网| 草草浮力影院| 成熟女人特级毛片www免费| 天堂中文8资源在线8| a片在线免费观看| 亚洲无线看天堂av| 高清有码国产一区二区| 天美传媒一区二区|