查询表记录
基于对象查询(子查询) 一对多 正向查询,按字段 Book-------------------->Publish <--------------------- 反向查询,按表名小写_set:book_set obj=Book.objects.fliter(title="python").first() obj.publish 多对多 正向查询,按字段 Book-------------------->Author <--------------------- 查询,按表名小写_set:book_set obj=Book.objects.fliter(title="python").first() obj.author.all() # [obj,....] 一对一: 正向查询,按字段 Book-------------------->Author <--------------------- 查询,按表名小写
基于queryset查询 正向查询,按字段 A-------------------->B <--------------------- 查询,按表名小写
聚合和分组 book id title publish 1 php 苹果 2 python 苹果 3 go 橘子 sql: select publish,Count(*) from Book group by publish #查询每一个出版社出版的书籍个数 # ret=Publish.objects.all().annotate(c=Count("book")).values("name","c") # print(ret) # 查询每一个作者出版的书籍的平均价格 ret=Author.objects.all().annotate(price_avg=Avg("book__price")).values("name","price_avg") print(ret) #查询每一本书籍名称以及作者的个数 ret=Book.objects.all().annotate(c=Count("author")).values("title","c") print(ret) # 查询价格大于200的每一本书籍名称以及作者的个数 ret = Book.objects.filter(price__gt=200).annotate(c=Count("author")).values("title", "c") print(ret)
F查询与Q查询 # F from django.db.models import F,Q ret=Book.objects.filter(comment_num__gt=F("poll_num")) print(ret) ret=Book.objects.filter(comment_num__gt=F("read_num")*10) print(ret) Book.objects.all().update(price=F("price")+100) # Q ret=Book.objects.filter(title__startswith="java",price__gt=200) print(ret) ret = Book.objects.filter(Q(title__startswith="java")|~Q(price__lt=200)) print(ret)
ORM查询练习题
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) # 999.99 # 创建一对多的关联字段 : 是与某个书籍对象关联的出版社对象(注意,只有一个对象) publish = models.ForeignKey("Publish") # 创建的多对多的关系 authors = models.ManyToManyField("Author") def __str__(self): return self.title class Publish(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) email = models.EmailField() def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() def __str__(self): return self.name class AuthorDetail(models.Model): addr = models.CharField(max_length=32) email = models.EmailField() author = models.OneToOneField("Author") def __str__(self): return self.email
基于图书管理系统的表关系与数据,进行如下查询 要求:1-5查询分别基于对象查询,双下划线查询,以及找到对应翻译的sql语句 1、查询人民出版社出版过的价格大于100的书籍的作者的email 2、查询alex出版过的所有书籍的名称以及书籍的出版社的名称 3、查询2011年出版社过的所有书籍的作者名字以及出版社名称 4、查询住在沙河并且email以123开头的作者写过的所有书籍名称以及书籍的出版社名称 5、查询年龄大于20岁的作者在哪些出版社出版过书籍 6、查询每一个出版社的名称以及出版过的书籍个数 7、查询每一个作者的名字以及出版过的所有书籍的最高价格 8、查询每一本书的名字,对应出版社名称以及作者的个数
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14. 以上是基于对象的查询
15.以下是基于QuerySet的查询
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.DOM操作
35.
36.
37.
38.
39.
40.
41.
42.
43.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步