在django框架下生成數據表,是用Model類來繼承生成的,如果對里面的字段要修改,但是因為表中還有些遺留數據,有時會無法生成新的表結構,這時候想到的一個簡單暴力的方法就是直接sql操作數據庫,刪除數據表,但是這么做會引起django遷移版本混亂的問題,不建議這么操作;如果已經sql刪除了,還是有補救辦法,可以參考第二部分和第三部分。建議操作還是第一部分的方法。
本人環境:
Django==2.2.1
MySql==8.0.20
一、利用Model類來操作
其實也很簡單,在models.py中,把想刪除的數據表對應的Model注釋掉,然后執行
python manage.py makemigrations app名稱
python manage.py migrate
就刪除對應數據表了。
然后寫入新的Model,去掉注釋,再次執行makemigrations和migrate就行了。
二、sql刪除數據表,fake遷移制造遷移記錄,再真正遷移
1、先到數據庫把表刪掉:
drop table 數據表名稱;
2、注釋django中對應的Model
3、在終端執行以下命令:
python manage.py makemigrations app名稱
python manage.py migrate --fake
fake就不是真正的遷移,只是制造當前狀態的遷移記錄。
4、去掉注釋重新遷移
python manage.py makemigrations app名稱
python manage.py migrate
三、整個app的數據表重建
其實也可以用第一部分的方法,這里說說在直接sql操作數據庫的方法。
1、到數據庫把本app中的表都刪掉
2、刪除本app文件夾下的migrations
目錄內所有文件,除了__init__.py
3、在數據庫中,找到django_migrations表,刪除本app對應的記錄;至此,就把之前的遷移記錄都刪掉了
4、重新遷移
python manage.py makemigrations app名稱
python manage.py migrate
四、其他指令
1、清空數據庫數據(此命令會詢問是 yes 還是 no, 選擇 yes 會把數據全部清空掉,只留下空表)
python manage.py flush
2、Django項目環境終端
python manage.py shell
如果你安裝了 bpython 或 ipython 會自動用它們的界面,推薦安裝 bpython。
這個命令和 直接運行 python 或 bpython 進入 shell 的區別是:你可以在這個 shell 里面調用當前項目的 models.py 中的 API,對於操作數據,還有一些小測試非常方便。
3、數據庫命令行
python manage.py dbshell
Django 會自動進入在settings.py中設置的數據庫,如果是 MySQL 或 postgreSQL,會要求輸入數據庫用戶密碼。
在這個終端可以執行數據庫的SQL語句。如果您對SQL比較熟悉,可能喜歡這種方式。