zoukankan      html  css  js  c++  java
  • DOM操作

      1 from django.shortcuts import render,HttpResponse
      2 
      3 # Create your views here.
      4 
      5 
      6 from .models import *
      7 def query(request):
      8 
      9 
     10     #######################基于对象的跨表查询(子查询)#######################
     11     # '''
     12     # 一对多:
     13     #      正向查询按字段
     14     # Book--------------->Publish
     15     #     <---------------
     16     #      反向查询按表名小写_set
     17     # '''
     18     # #(1) 查询id为2的书籍对应出版社的邮箱
     19     # obj=Book.objects.filter(nid=2).first()
     20     # print(obj.publish.email)
     21     # ret=obj.publish.email
     22     # # select publihs_id from Book where nid=2
     23     # # select   email    from  Publish where nid=(select publihs_id from Book where nid=2)
     24     #
     25     # #(2) 橘子出版社出版过的所有的书籍的名字
     26     # # obj=Publish.objects.filter(name="橘子出版社").first()
     27     # # ret=obj.book_set.all().values("title")
     28     #
     29     # '''
     30     #    多对多:
     31     #         正向查询按字段
     32     #    Book--------------->Author
     33     #        <---------------
     34     #         反向查询按表名小写_set
     35     #         反向查询按xxx
     36     # '''
     37     #
     38     # # 查询围城所有作者的名字
     39     # obj=Book.objects.filter(title="围城").first()
     40     # ret=obj.authors.all().values("name")
     41     # print(ret)
     42     #
     43     # # 查询alex出版的书籍个数
     44     # obj=Author.objects.filter(name="alex").first()
     45     # ret=obj.book_set.all().count()
     46     # print(ret)
     47     #
     48     # '''
     49     #        一对一:
     50     #             正向查询按字段
     51     #        Book--------------->Author
     52     #            <---------------
     53     #             反向查询按表名小写
     54     # '''
     55     #
     56     # # 查询alex的手机号
     57     # obj=Author.objects.filter(name="alex").first()
     58     # ret=obj.authorDetail.telephone
     59     # print(ret)
     60     #
     61     # # 住在烟台的作者的名字
     62     #
     63     # obj_list=AuthorDetail.objects.filter(addr="烟台")
     64     # for obj in obj_list:
     65     #     print(obj.author.name)
     66 
     67     #######################基于queryset和__的跨表查询(join查询)#######################
     68     '''
     69     正向查询安字段
     70     反向查询安表名
     71     '''
     72     # (1)查询id为2的书籍对应出版社的邮箱
     73     # ret=Book.objects.filter(price=100).values("publish__email")
     74     # print(ret)# [{publish__email:456},{publish__email:456},{publish__email:123}]
     75     '''
     76     Book.objects.filter(price=100).values("title","publish__email"):
     77     queryset=Book.objects.filter(price=100)
     78     temp=[]
     79     for obj in queryset:
     80         temp.append({
     81             "title":obj.title,
     82             "publish__email":obj.publish__email
     83         })
     84         
     85     temp
     86     
     87     '''
     88 
     89     # # (2)橘子出版社出版过的所有的书籍的名字
     90     # ret=Publish.objects.filter(name="橘子出版社").values("book__title")
     91     # print(ret)
     92     # # (3)查询围城所有作者的名字
     93     # ret=Book.objects.filter(title="围城").values("authors__name")
     94     # print(ret)
     95     # # (4)查询alex出版的书籍个数
     96     # Author.objects.filter(name="alex").values("book__title").count()
     97     # # (5)查询alex的手机号
     98     # ret=Author.objects.filter(name="alex").values("authorDetail__telephone")
     99     # print(ret)
    100     # # (6)住在烟台的作者的名字
    101     # ret=AuthorDetail.objects.filter(addr="烟台").values("author__name")
    102     # print(ret)
    103 
    104 
    105     #####################分组查询##########################
    106     from django.db.models import Count,Avg
    107     # # 每一个出版社的名字以及对应出版书籍个数
    108     # ret=Publish.objects.all().annotate(book_count=Count("book__title")).values("name","book_count")
    109     # print(ret)
    110     #
    111     # # 查询每一个作者的名字以及对应书籍的平均价格
    112     # ret=Author.objects.all().annotate(books_avg=Avg("book__price")).values("name","books_avg")
    113     # print(ret)
    114     #
    115     #
    116     # # 查询每一本书 的名字以及作者的个数
    117     # ret=Book.objects.all().annotate(c=Count("authors")).values("title","c")
    118     # print(ret)
    119 
    120 
    121 
    122     # select * from Publish group by id
    123     # select 哪个字段就按哪个字段group_by
    124     ret=Book.objects.values("title").annotate(c=Count("*"))
    125     print(ret)
    126     # SELECT "app01_book"."title", COUNT(*) AS "c" FROM "app01_book" GROUP BY "app01_book"."title"
    127 
    128     return HttpResponse("OK")
     1 from django.db import models
     2 
     3 # Create your models here.
     4 
     5 
     6 
     7 class AuthorDetail(models.Model):
     8     nid = models.AutoField(primary_key=True)
     9     birthday = models.DateField()
    10     telephone = models.BigIntegerField()
    11     addr = models.CharField(max_length=64)
    12 
    13 class Author(models.Model):
    14     nid = models.AutoField(primary_key=True)
    15     name = models.CharField(max_length=32)
    16     age = models.IntegerField()
    17     # 与AuthorDetail建立一对一的关系
    18     authorDetail = models.OneToOneField(to="AuthorDetail")
    19 
    20 class Publish(models.Model):
    21     nid = models.AutoField(primary_key=True)
    22     name = models.CharField(max_length=32)
    23     city = models.CharField(max_length=32)
    24     email = models.EmailField()
    25 
    26 
    27 class Book(models.Model):
    28     nid = models.AutoField(primary_key=True)
    29     title = models.CharField(max_length=32)
    30     publishDate = models.DateField()
    31     price = models.DecimalField(max_digits=5, decimal_places=2)
    32     keepNum = models.IntegerField()
    33     commentNum = models.IntegerField()
    34 
    35     # 与Publish建立一对多的关系,外键字段建立在多的一方
    36     publish = models.ForeignKey(to="Publish", to_field="nid",)
    37 
    38     # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
    39     authors = models.ManyToManyField(to='Author')
  • 相关阅读:
    (转)Go和HTTPS
    (转)Using Python3.5 in Ubuntu
    linux下配置某程序的sudo不用输密码
    双系统linux+win之血的教训
    (转)如何修复ubuntu的UEFI引导
    Android ——Toolbar开发实践总结(转)
    Android——Fragment 真正的完全解析(下)(转)
    Android—— Fragment 真正的完全解析(上)(转)
    android——官方下拉刷新组件SwipeRefreshLayout(转)
    Android——使用Toolbar + DrawerLayout快速实现高大上菜单侧滑(转)
  • 原文地址:https://www.cnblogs.com/qinghuani/p/8926549.html
Copyright © 2011-2022 走看看