Skip to main content

[模型]:ORM删除数据

本节我们来介绍ORM增删改查的最后一个:删除数据。 在删除数据的时候呢,通常有两种方式。 图26-删除的2种方式

第1种就是物理删除, 所谓的物理删除就是将其 从我们的磁盘中进行删除。 那删除以后呢,它就不能再恢复了, 我们可以使用delete方法进行删除。 第2种呢就是逻辑删除, 逻辑删除呢,并不是真正的删除, 而是添加一个字段。 比如说我们设置为status, 用于表示它的状态, 可以给它设置两个值, 0和1, 如果是1的话就按照记录来显示, 如果是0的这条记录就不显示, 通过控制这个字段,我们就可以让这条记录进行显示和隐藏。 但是它也有麻烦的地方, 就是每次在查询的时候,我们都需要设置上这个字段, 因为如果你不设置,它就默认不显示的, 这是两种常用的删除方式。

小伙伴可以根据自己的需求来进行设置, 如果你想真正的删除它,就使用物理删除, 如果你还想保留, 方便以后查询,那么就可以使用这个逻辑删除。

例如我们一些订单表中的, 这个订单数据, 时间长了这些订单呢, 用户是可以进行删除的, 但是呢,为了方便后续我们查找这个订单, 所以我们不会使用真正的物理删除, 而是使用逻辑删除, 当用户删除这个订单以后, 只是在用户的界面它不显示而已, 因为我们将这个字段设置为了0, 不显示, 而真实的这条记录是存在的, 那接下来咱们重点讲解一下这个物理删除。

删除1条记录

删除的时候呢,我们一定要知道你要删除的是哪条记录, 不然的话呢,它会全部都进行删除的。

比如说现在我们要把这个user表中,id=4的进行删除。示例如下:

user = User.objects.get(id=4)
user.delete()

执行完发现数据库中id=4的记录以及被删除了。

注意

删除时一定要注意删除条件,如果没有删除的条件的话,则会删除全部数据。

删除多条记录

此外,我们还可以删除多条记录。例如,删除user_id=3和user_id=4的两条记录,示例如下:

# 查询要删除的用户
>>> users = User.objects.filter(id__in=[3, 4])
# 删除查询集合中的实例
>>> users.delete()

删除包含关联关系的数据

在删除的时候我们特别需要注意一点,就是表之间的关联关系。例如,User表和Article表是一对多关系,在Article模型中,有如下设置:

class Article(model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=120)
slug = models.CharField(max_length=200, default='')
content = models.TextField()
publish_date = models.DateTimeField()
user = models.ForeignKey(User, on_delete=models.CASCADE)

user字段设置了外键属性on_delete=models.CASCADE, 级联删除。也就是,如果删除一个用户时,这个用户下有对应的文章,那么也会随之删除。 那如果不设置这个属性的话,用户删除后,这个文章会保存着, 但是我们已经无法通过user来找到它的id了。 所以呢,一般情况下, 当我们把一个用户都删除了, 那么它的文章也会自然而然的消失了。

本节我们就介绍到这里, 小伙伴,我们下节再见。