django下删数据表后重建,最好利用django模型来操作

引入

我在做djando项目时修改了models类的属性,但是里面已经有数据了,运行migrate迁移失败。

原因:在django框架下生成数据表,是用Model类来继承生成的,如果对里面的字段要修改,但是因为表中还有些遗留数据,有时会无法生成新的表结构。

这时候想到的一个简单暴力的方法就是直接sql操作数据库,删除数据表,但是这么做会引起django迁移版本混乱的问题,不建议这么操作;如果已经sql删除了,还是有补救办法,可以参考第二部分和第三部分。建议操作还是第一部分的方法。

第一种方式:利用Model类来操作

其实也很简单,在models.py中,把想删除的数据表对应的Model注释掉,然后执行

python manage.py makemigrations app名称
python manage.py migrate

就删除对应数据表了。

然后写入新的Model,去掉注释,再次执行makemigrations和migrate就行了。

第二种方式:sql删除数据表,fake迁移制造迁移记录,再真正迁移

1、先到数据库把表删掉:

  1. drop table 数据表名称;
  2. 注释django中对应的Model
  3. 在终端执行以下命令:
python manage.py makemigrations app名称
python manage.py migrate --fake
# fake就不是真正的迁移,只是制造当前状态的迁移记录。
  1. 去掉注释重新迁移
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
  1. Django项目环境终端
python manage.py shell

如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。

这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。

  1. 数据库命令行
python manage.py dbshell

Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。

在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。


参考

在csdn上没有找到结果,在博客园找才解决的,csdn的环境真该维护了。
https://www.cnblogs.com/djlbolgs/p/12978459.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertOS

还会有大爷会打钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值