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比较熟悉,可能喜欢这种方式。

 

posted @ 2020-05-28 09:39  djl_djl  阅读(2372)  评论(0编辑  收藏  举报