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