zoukankan      html  css  js  c++  java
  • Django ORM 操作 必知必会13条 单表查询

    ORM 操作 必知必会13条

    import os
    # if __name__ == '__main__':  # 当前文件下执行
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
    import django
    django.setup()  # 初始设置  脚本 加载了Django环境
    
    from app01 import models
    ret = models.Person.objects.all()        # QuerySet   all 所有
    ret = models.Person.objects.get(pk=101)  # 获取不到或者多个就报错   获取某一条数据  对象
    ret = models.Person.objects.filter(name = 'alex') # QuerySet  对象列表 满足条件
    ret = models.Person.objects.exclude(name = 'alex')# 满足条件后取反--反选 对象列表
    ret = models.Person.objects.values() # QuerySet  获取数据所有字段的值 不再是对象,变成字典
    ret = models.Person.objects.filter(name = 'alex').values() # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典
    ret = models.Person.objects.filter(name = 'alex').values('pid','name') # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典
            # 不指定字段显示所有,指定字段显示选择内容  { 值 值}
    ret = models.Person.objects.filter(name = 'alex').values_list() # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典
            # 获取字段的值 元组 ( 值 值 )        --> 传字段
    
    ret = models.Person.objects.all().order_by('-pid','age')  # 升序   -pid 降序  左优先  多个字段排序
    
    ret =ret.reverse()  # 排好序的 后面反转的
    
    ret = models.Person.objects.all()  # 这个用reverse 没效果     models.py 中  class Meta: ordering = ('pid')
    
    ret = models.Person.objects.all().distinct()    # distinct() 去重   mysql不支持按字段去重
    ret = models.Person.objects.values('name').distinct()    # distinct() 去重
    
    ret = models.Person.objects.count()  # 计数
    ret = models.Person.objects.filter(pid=122).first() # 第一个   查不到/不报错/返回None
    ret = models.Person.objects.all().last()  # 取最后一个
    ret = models.Person.objects.filter(pid=100).exists()  # 查存在不  返回True/Flase
    总结:
    返回queryset的有 
    all() , filter() , exclude() , order_by() , reverse() , distinct()
    
    特殊的queryset的有 
    values()  values_list()
    
    返回数字的:
    count()
    
    返回具体对象的
    get()  first()  last()
    
    返回布尔值的
    exists()

    单表的双下划线方法

    import os
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
    import django
    django.setup()   # 初始化
    
    # 单表查询
    from app01 import models
    
    ret = models.Person.objects.filter(pk__gt=100) # greater than 大于
    ret = models.Person.objects.filter(pk__lt=100) # less than 小于
    ret = models.Person.objects.filter(pk__gte=100) # greater than equal 大于等于
    ret = models.Person.objects.filter(pk__lte=100) #小于等于
    ret
    = models.Person.objects.filter(pk__in=[100,103]) #查几个
    ret = models.Person.objects.exclude(pk__in=[100,103]) #原生sql 中的 not in

    ret = models.Person.objects.filter(pk__lte=103,pk__gte=100) # 大于等于 -- 小于等于
    ret = models.Person.objects.filter(pk__range=[100,103])     # 什么范围
    ret
    = models.Person.objects.filter(name__contains = 'l') # 原生sql中的 like 包含
    ret = models.Person.objects.filter(name__icontains = 'L') # 大小写 不敏感
    ret
    = models.Person.objects.filter(name__startswith = 'x') # 开头
    ret = models.Person.objects.filter(name__istartswith = 'X') # 不敏感处理
    ret
    = models.Person.objects.filter(name__endswith = 'X') # 以什么结束

    ret = models.Person.objects.filter(name__iendswith = 'X') # 不敏感处理
    ret
    = models.Person.objects.filter(birth__year='2019') #条件查询
    ret
    = models.Person.objects.filter(birth__month='01') # 查不到
    ret = models.Person.objects.filter(birth__contains='2019-01-24') # 能查了
    ret = models.Person.objects.filter(age__isnull=True) # 是否为空

     外键查询

    正向查找
    
    对象查找(跨表)
    语法:对象.关联字段.字段
    book_obj = models.Book.objects.first()  # 第一本书对象
    print(book_obj.publisher)  # 得到这本书关联的出版社对象
    print(book_obj.publisher.name)  # 得到出版社对象的名称
    
    字段查找(跨表)
    语法: 关联字段__字段
    print(models.Book.objects.values_list("publisher__name"))
    ------------------------------------------------------------------
    反向查找
    
    对象查找
    语法:obj.表名_set
    publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
    books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
    titles = books.values_list("title")  # 找到第一个出版社出版的所有书的书名
    
    字段查找
    语法:表名__字段
    titles = models.Publisher.objects.values_list("book__title")

    ManyToManyField

  • 相关阅读:
    标准maven配置setting文件
    zxing生成和解析二维码工具类
    Postman上传文件
    sql server工具类
    springboot开启token校验一直报错No 'Access-Control-Allow-Origin' header is present on the requested resource
    Jpa分页查询
    Restful接口调用统一异常处理
    npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置(转载)
    element-ui el-table 组件实现跨表格多选
    微信小程序设置页面背景色的方式(全局或单页面)
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10321780.html
Copyright © 2011-2022 走看看