查看Django数据库中所有的表和删除表操作

Django创建Web程序后,中途你为某个模型添加了字段或者修改了字段,你希望把该表删除了,重新执行makemigrations、migrate。你可以直接进入dbshell界面,直接删除表。
具体操作如下:
进入命令行界面,切换到manage.py所在的目录:

python manage.py dbshell

注意,是dbshell,不是shell。

此时,命令行应是显示如下字样:

sqlite>

输入如下命令:

SELECT * FROM sqlite_master WHERE type='table';

这条命令不需要更改任何字符串,直接原样输入即可。
在sqlite>界面输入任何命令语句,后面必须加上;分号,才会执行该语句。但是退出命令不用加分号,退出dbshell,输入.quit。quit前有个点。后面也不加分号。

这是显示数据库中所有表格。表比较多,仔细看。里面有一些表是你创建Django项目时自动生成的表。也有你在自己的app里models.py创建的表。

删除表格输入如下命令:

DROP TABLE weekdays_plan_vocation;

weekdays_plan是我的Web程序中自己创建的app名称。vocation是指models.py中的模型Vocation。该模型在数据库中对应的表格名称就是weekdays_plan_vocation。
weekdays_plan_vocation是你要删除的表名。可以从上一句命令中执行结果中查询到。

从dbshell命令行界面执行Drop Table命令删除表格后,数据库中的表确实删除了。但是如果你此时就执行:

python manage.py makemigrations weekdays_plan
python manage.py migrate

是会报错的。原因在于db.sqlite3数据库中的django-migrations表中仍然存储着删除的表已经创建的信息。所以,它不会重新创建表。

此时,执行:

python manage.py migrate --fake weekdays_plan zero

查看Django数据库中所有的表和删除表操作_第1张图片
显示在撤销相关信息。然后再执行:

python manage.py migrate --fake-initial weekdays_plan

查看Django数据库中所有的表和删除表操作_第2张图片
你可以查看将要执行的迁移操作

python manage.py showmigrations weekdays_plan

接下来,你可以执行

python manage.py makemigrations train_plan
python manage.py migrate

就OK了。

你可能感兴趣的:(Python)