Django - 4 模型层(2)

本文详细介绍了Django框架对数据库的管理,包括如何添加、查询、更新和删除记录。提供了多种查询API,如filter、get、exclude等,以及基于双下划线的模糊查询。此外,还涵盖了批量更新和删除操作,以及对象关联时的删除行为。通过对Django ORM的深入理解,开发者能更高效地操作数据库。
摘要由CSDN通过智能技术生成

本文章主要是Django对于对于数据库的增删查改

添加表纪录

方式1

# create 方法的返回值 book_obj 就是插入 book 表中的 python 葵花宝典这本书籍纪录对象
book_obj=Book.objects.create(title="python 葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-1)

方式2

book_obj=Book(title="python 葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
book_obj.save()

查询表纪录

**查询 API **

<1> all(): 查询所有结果

<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象

<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象

<5> order_by(*field): 对查询结果排序

<6> reverse(): 对查询结果反向排序

<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。

<9> first(): 返回第一条记录

<10> last(): 返回最后一条记录

<11> exists(): 如果 QuerySet 包含数据,就返回 True,否则返回 False

<12> values(*field): 返回一个 ValueQuerySet——一个特殊的 QuerySet,运行后得到的并不是一系列model 的实例化对象,而是一个可迭代的字典序列

<13> values_list(*field): 它与 values()非常相似,它返回的是一个元组序列,values 返回的是一个字典序列

<14> distinct(): 从返回结果中剔除重复纪录

基于双下划线的模糊查询

Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)

删除表纪录

删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如:

model_obj.delete()

你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。
例如,下面的代码将删除 pub_date 是 2005 年的 Entry 对象:

Entry.objects.filter(pub_date__year=2005).delete()

在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如:

b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()

要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用
Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用:

Entry.objects.all().delete() 

如果不想级联删除,可以设置为:

pubHouse = models.ForeignKey(to='Publisher',on_delete=models.SET_NULL,blank=True, null=True)

修改表纪录

Book.objects.filter(title__startswith="py").update(price=120)

此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录 update()方法会返回一个整型数值,表示受影响的
记录条数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凡陌熙

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值