zoukankan      html  css  js  c++  java
  • 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比较熟悉,可能喜欢这种方式。

  • 相关阅读:
    Codevs2822 爱在心中
    3098: Hash Killer II
    课程总结
    团队作业——个人总结
    团队作业2
    团队个人分工
    装甲车团队介绍(别急,在做了)
    面向对象程序设计作业(4)
    面向对象程序设计作业(3)
    面向对象程序设计(2)
  • 原文地址:https://www.cnblogs.com/djlbolgs/p/12978459.html
Copyright © 2011-2022 走看看