makemigrations:將模型的更改生成遷移腳本文件。模型所在的app,必須放在settings.py中的INSTALLED_APPS列表中。這個命令有以下幾個常用選項:
1、app_label:后面可以跟一個或者多個app,那么就只會針對這幾個app中模型的變化生成遷移腳本。如果沒有任何的app_label,默認會檢查INSTALLED_APPS中所有的app下的模型,針對每一個app中models的改變都生成相應的遷移腳本,注意生成的這些個遷移腳本文件都存放在各個app下的migrations下。
2、--name:給這個遷移腳本指定一個名字,如果不指定名字,那么生成的腳本文件的名稱將會不那么見名知意。
3、--empty:生成一個空的遷移腳本。如果你想寫自己的遷移腳本,可以使用這個命令來實現一個空的文件,然后自己再在文件中寫遷移腳本。
migrate:將新生成的遷移腳本,映射到數據庫中,創建新的表或者修改表的結構。執行python manage.py migrate命令會執行兩個步驟:
1、執行對應app(默認為INSTALLED_APPS下所有的app,當然也可以指定app名稱)下的migrations文件夾下的遷移腳本文件並映射到數據表,除了第一個遷移腳本文件沒有依賴,其余的遷移腳本文件都會依賴前一個,在執行遷移腳本文件的時候,django首先會檢查'django_migrations'表中的記錄,執行指定的遷移腳本(默認為最新的,可以指定app和遷移腳本文件版本名稱),會依次執行它依賴的遷移腳本文件,直到這個依賴已經執行過了(會在'django_migrations'有記錄)
2、將已經執行的遷移腳本文件記錄在django默認生成的'django_migrations'表中
app_label:將某個app下的遷移腳本映射到數據庫中。如果沒有指定,那么會將所有在INSTALLED_APPS中的app下的模型都映射到數據庫中。
app_label migrationname:將某個app下指定名字的migration文件映射到數據庫中。
執行migrate命令可能會報錯,報錯的主要原因是數據庫的'django_migrations'表中的遷移版本與對應數據表中的數據表結構生成所需的遷移腳本相沖突。下面兩個命令是解決報錯的可用方法:
1、--fake:可以將指定的遷移腳本名字添加到數據庫中。但是並不會把遷移腳本轉換為SQL語句,修改數據庫中的表。使用與數據表結構所需遷移腳本比已執行的遷移腳本超前。
2、--fake-initial:將第一次生成的遷移文件版本號記錄在數據庫中。但並不會真正的執行遷移腳本。使用於遷移腳本文件缺少並且很亂,可以把表的結構與models里的結構弄一致,刪除所有遷移腳本,清空所有這個app相關的'django_migrations'數據。執行makmigrations,然后執行--fake-initial,繼續正常的些其他表內容
showmigrations:查看某個app下的遷移文件。如果后面沒有app,那么將查看INSTALLED_APPS中所有的遷移文件。
sqlmigrate:查看某個遷移文件在映射到數據庫中的時候,轉換的SQL語句
