django ORM 关于表查询

添加记录:
  添加记录方式1:
    Book.objects.create(title="三体",....)
  添加记录方式2:
    book=Book(title="三体",....)
    book.save()

1 查询记录:
  查询API:
    1 Book.objects.all()         # querysey [obj,....]
    2 Book.objects.filter(title="三体")    # querysey [obj,....]
      queryset.filter()          # 返回值 queryset

    3 Book.objects.exclude(title="三体")    # querysey [obj,....]   排除,不包括
    4 Book.objects.all().first()     # obj
    5 Book.objects.all().last()      # obj
    6 Book.objects.all()[0]       # obj
    7 Book.objects.get(title="三体")   # obj
    
    8 queryset.order_by()        # 返回值 queryset
    9 queryset.reverse()        # 返回值 queryset
    10 queryset.count()        # 返回值 int (queryset的终止函数)
        Book.objects.all().filter(price__gt=100).order_by("pirce").count()

    11 queryset.exist()        # 返回值是布尔值
    12 queryset.values("price")     # 返回值 queryset [{"price":123},{"price":124},{"price":13}]
    13 queryset.valueslist("price")     # 返回值 queryset [(123,),(124,),(345,)]
    14 queryset.distinct("price")        # 返回值 queryset       去重复

2 模糊查询 __  

  条件选取querySet的时候,filter表示=,exclude表示!=。

  querySet.distinct() 去重复
  __exact 精确等于 like 'aaa'
     __iexact 精确等于 忽略大小写 ilike 'aaa'
     __contains 包含 like '%aaa%'
     __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
  __gt 大于
  __gte 大于等于
  __lt 小于
  __lte 小于等于
  __in 存在于一个list范围内
  __startswith 以...开头
  __istartswith 以...开头 忽略大小写
  __endswith 以...结尾
  __iendswith 以...结尾,忽略大小写
  __range 在...范围内
  __year 日期字段的年份
  __month 日期字段的月份
  __day 日期字段的日
  __isnull=True/False


  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="x")
  Book.objects.filter(title__icontains="x")
  Book.objects.filter(title__startswith="py")
  Book.objects.filter(pub_date__year=2012)

3 跨表查询    

  1 基于对象 查询,一步一个脚印的查询

     正反向查询(见qq邮箱) 

  2  基于(表连接)查询

   基于字段查询

   基于双下划线查询         双下划线  即 连接起来两个表        (也可以连续跨表)

     1 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多)        

       queryResult=Book.objects.filter(publish__name="苹果出版社").values_list("title","price")       

       queryResult=Publish.objects.filter(name="苹果出版社").values_list("book__title","book__price")   

                   publish__name 表示本表字段publish关联的表(to=‘Publish’)中的字段name

                   book 表示与Publish表关联的表Book   

     2 练习: 查询alex出过的所有书籍的名字(多对多)

       queryResult=Book.objects.filter(authors__name="yuan").values_list("title")                 

       queryResult=Author.objects.filter(name="yuan").values_list("book__title","book__price")              

                   authors__name   表示 authors 指向的表中的name字段

                   book 表示的与Author表 关联的Book表

猜你喜欢

转载自www.cnblogs.com/kingon/p/9433509.html