草庐IT

如何在Django中安全且完整的删除一个Model类(超详细!!!)

热爱学习的猪 2024-06-09 原文

在Django中安全且完整的删除一个Model类(超详细!!!)

有时候我们在Django项目中定义一个模型类且已经迁移到数据库中,可能会考虑得不够周到,想把这一个模型类给删除掉重新写或是不想要这一个模型类了想直接把它删除掉,但是不正确、不完全的删除只会让你的Django项目和数据库越来越混乱,最后在开发的过程中老是会有莫名其妙的问题出现(作者以前就是会这样😂😂😂),所以,为了让大家少因为这种情况而出错,就写出了这一篇文章帮助大家,希望能对大家学习或工作的过程中有所帮助~👍👍👍

具体可以分为以下四个步骤:

1.先删除模型类代码,就是class xxx;

2.删除掉模型类再migrations文件夹中生成的对应的文件;

3.删除mysql数据库中migrations表的对应数据;

4.再删除数据库中模型类对应生成的数据表;

如果还不太明白的同学可以看如下具体操作👇👇👇

一、前置准备🐷

假设我现在新建了一个名为Book的Django项目,并创建了一个book_shop的app,先做相关配置工作。

首先,先将book_shop添加到setting.py文件中的INSTALLED_APPS中,如下所示:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "book_shop",
]

而后,将django项目连接到名为book_db的数据库,如下所示:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "book_db",
        "HOST": "localhost",
        "PORT": 3306,
        "USER": "root",
    }
}

接下来就是我们要讲的重点,在book_shop这个app中的model.py中,先定义了一个model类叫做Book,并设计相关的字段,如下

from django.db import models
from datetime import datetime

# Create your models here.


class Book(models.Model):
    book_name = models.CharField(max_length=50)               # 书本名
    book_author = models.CharField(max_length=30)             # 书本作者名
    book_description = models.TextField(help_text="书本介绍")  # 书本介绍
    create_at = models.DateTimeField(default=datetime.now)    # 书本创建时间
    update_at = models.DateTimeField(default=datetime.now)    # 书本修改时间

    class Meta:
        db_table = "Book_shop"  # 更改数据表名

而后运行命令,生产迁移文件,并迁移到数据库中,如下:

python manage.py makemigrations  # 生成迁移文件
python manage.py migrate  # 执行迁移到数据库

等待迁移结束,我们就可以在数据库中看到相关数据表和对应的字段

生成的数据表:

book_shop数据表中的字段:

二、安全的完整删除一个模型类🐷🐷

第🐷步:先删除模型类代码,也就是class Book

先将book_shop中的model.py文件中的Book模型代码全部给删除掉。

删除前:

删除后:

第🐷🐷步:删除掉模型类再migrations文件夹中生成的对应的文件

删除掉,book_shop中migrations生成的对应的迁移文件

第🐷🐷🐷步:删除mysql数据库中migrations表的对应数据

打开数据库,找到我们连接的book_db数据库下的django_migrations数据表,点开django_migrations数据表后把对应的book_shop这一行的数据删除掉。(为什么是book_shop呢?因为我们在定义模型类的时候给Book模型定义了一个别名,就是book_shop,可以回到前置准备中的model.py文件处的代码查看)

第🐷🐷🐷🐷步:删除数据库中模型类对应生成的数据表

到book_db数据库下生成的book_shop表,然后把它删除掉,就大功告成了!

而后我们又可以重新新建一个名为Book的模型类啦!希望这一篇文章对您有帮助,感谢您的观看!

如果有任何问题,欢迎在评论区留言噢~👀

有关如何在Django中安全且完整的删除一个Model类(超详细!!!)的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  5. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  6. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  7. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  8. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  9. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  10. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

随机推荐