zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    【摄影】EOS 6D通过WIFI连接手机
    【Teradata SQL】dayofyear与td_day_of_year函数区别
    【PS技巧】如何修人物的脸型
    【Teradata数据保护机制】锁
    【数据库】SQL标准定义的四个事务隔离级别
    【TD函数】Teradata正则表达式函数
    Teradata复杂视图跨库访问权限问题
    CPU芯片组与总线
    单核CPU、多个CPU(路)、超线程技术、多核CPU(物理核、逻辑核)
    Idea删除当前类所有的注释
  • 原文地址:https://www.cnblogs.com/shangdelu/p/8987882.html
Copyright © 2011-2022 走看看