S20_DAY17--课堂笔记

查询表记录

基于对象查询(子查询)

      一对多 
      
                正向查询,按字段
          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
          <---------------------
        查询,按表名小写
基于queryset查询
聚合和分组

        
  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)
F查询与Q查询

 

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
models.py

 

基于图书管理系统的表关系与数据,进行如下查询
  要求: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.

 

转载于:https://www.cnblogs.com/shangdelu/p/8987882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值