django下刪數據表后重建,最好利用django模型來操作


在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比較熟悉,可能喜歡這種方式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM