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 基于对象 查询,一步一个脚印的查询

      正向查询:关联属性(字段)创建在表A中,所以表A的对象找关联表B的数据,正向查询

              反向查询:关联属性(字段)在创建在表A中,所以表B的对象找关联表A的对象,反向查询
       反向查询   “小写表名_set.all()”
        author_obj = Author.objects.get(name = "egon" )
        book_list = author_obj.book_set. all ()       #与egon作者相关的所有书籍

  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表

 

转载于:https://www.cnblogs.com/kingon/p/9433509.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值