zoukankan      html  css  js  c++  java
  • 配置临时脚本启动Django 及 ORM查询的13种方法

     1 import os
     2 
     3 if __name__ == '__main__':
     4     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "book_sys.settings")
     5     import django
     6     django.setup()
     7 
     8     from show import models
     9 
    10     r = models.Person.objects.exists()
    11     ret=models.Author.objects.exists()
    12     print(r,ret)

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    内置的查询方法:

     1 <1> all():                 查询所有结果
     2  
     3 <2> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象
     4  
     5 <3> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
     6  
     7 <4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象
     8  
     9 <5> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
    10  
    11 <6> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
    12  
    13 <7> order_by(*field):      对查询结果排序
    14  
    15 <8> reverse():             对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。
    16  
    17 <9> distinct():            从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)
    18  
    19 <10> count():              返回数据库中匹配查询(QuerySet)的对象数量。
    20  
    21 <11> first():              返回第一条记录
    22  
    23 <12> last():               返回最后一条记录
    24  
    25 <13> exists():             如果QuerySet包含数据,就返回True,否则返回False

     单表查询之双下方法:

     1 models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
     2  
     3 models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
     4 models.Tb1.objects.exclude(id__in=[11, 22, 33])  # 相当于 not in
     5  
     6 models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
     7 models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
     8  
     9 models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
    10  
    11 类似的还有:startswith,istartswith, endswith, iendswith 
    12 
    13 date字段还可以:
    14 models.Class.objects.filter(first_day__year=2017)

     关于表的反向查询:

    方法一:

    1 ret=models.Press.objects.filter(id=3)[0].book_set.all()

    注意:models.Press.objects.filter(id=3) 查询出来的值为列表对象,要想使用其继续查询,需要先取出值

    方法二:

    在主外键关系表里的外键属性添加一个用来反向查询的别名

    1 class Book(models.Model):
    2     bid=models.AutoField(primary_key=True)
    3     bname=models.CharField(max_length=48,null=False,unique=True)
    4     press=models.ForeignKey(to='Press',related_name='books')    #外键关系

    然后通过别名去查询:

    1 ret=models.Press.objects.filter(id=2)[0].books.all()

    特别注意,如果之前就在外键添加了别名,那么是无法用 表名_set 的方式去操作的

    1  book=models.Press.objects.filter(id=3).values_list('books__bname')    #结果集取值
    1 sh=models.Press.objects.first()     #一条结果对象
  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9583101.html
Copyright © 2011-2022 走看看