Django反向migration數(shù)據(jù)庫(kù)
最近接手了一個(gè)django項(xiàng)目,由于之前的開(kāi)發(fā)者經(jīng)常手動(dòng)修改表結(jié)構(gòu),導(dǎo)致django的migrations和數(shù)據(jù)庫(kù)無(wú)法保持一致。想要徹底解決一下這個(gè)歷史遺留問(wèn)題。
思路
- 將現(xiàn)有數(shù)據(jù)庫(kù)結(jié)構(gòu)反向migration為model文件
- 刪除現(xiàn)在所有app下的migrations文件
- 采集生成的model文件的migrations,migrate但是不應(yīng)用
生成model文件
下面我使用的django項(xiàng)目名稱(chēng)為hello_world, 使用的setting文件為settings_dev
這里將數(shù)據(jù)庫(kù)結(jié)構(gòu)生成的model文件存儲(chǔ)在test_models.py這個(gè)文件中
python manage.py inspectdb --settings=hello_world.settings_dev > test_models.py
然后從test_models.py中把格子對(duì)應(yīng)的app的model替換到models.py中
刪除舊的migrations文件
將各app下的migrations文件刪除,包括__pycache__文件夾
之后來(lái)到數(shù)據(jù)庫(kù)執(zhí)行
delete from django_migrations
將之前的migrations記錄刪除
生成新的migrations文件
來(lái)到django項(xiàng)目根目錄,執(zhí)行
python manage.py makemigrations --settings=hello_world.settings_dev
根據(jù)models生成新的migrations文件
然后migrate,但不應(yīng)用修改
python manage.py migrate --fake-initial --settings=hello_wrold.settings_dev
到這個(gè)時(shí)候?yàn)橹?,django項(xiàng)目將會(huì)應(yīng)用數(shù)據(jù)庫(kù)的結(jié)構(gòu),并且會(huì)有新的migrations文件
接下來(lái)修改數(shù)據(jù)庫(kù)就可以直接python manage.py makemigrations和python manage.py migrate這兩條命令修改了