• 配置临时脚本启动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()     #一条结果对象
  • 相关阅读:
    【干货】和你谈谈数据分析报告
    输入整型数组和排序标识
    删除字符串中出现次数最少的字符
    字符串排序
    老男孩Django笔记(非原创)
    Cloakroom
    星际网络
    乘车路线
    渔民的烦恼
    【教程】Microsoft Wi-Fi Direct Virtual关闭方法
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9583101.html
Copyright © 2020-2023  润新知