• 单表查询API


    Django ORM单表查询

    单表查询API汇总

    必会13条

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

    返回QuerySet对象的方法有

    all()

    filter()

    exclude()

    order_by()

    reverse()

    distinct()

    特殊的QuerySet

    values()       返回一个可迭代的字典序列

    values_list() 返回一个可迭代的元祖序列

    返回具体对象的

    get()

    first()

    last()

    返回布尔值的方法有:

    exists()

    返回数字的方法有

    count()

    单表查询之神奇的双下划线

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

    models.Class.objects.filter(first_day__year='2018',first_day__month='7',first_day__day='23')
      2,字符串匹配

    models.Class.objects.filter(first_day__startswith=datetime.date(2018,7,23))
      3,字符串包含
    models.Class.objects.filter(first_day__contains=datetime.date(2018.7.23))
     
     

    Django终端打印SQL语句

    在Django项目的settings.py文件中,在最后复制粘贴如下代码:

     
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }
     

    即为你的Django项目配置上一个名为django.db.backends的logger实例即可查看翻译后的SQL语句。 

  • 相关阅读:
    List.add方法传入的是地址(引用)而不是值
    List (或ArrayList) 转换为int[]数组 终于搞懂了
    01背包 完全背包 状态转移方程及空间复杂度优化
    十大排序算法整理(五):归并排序实现
    OpenStack Object Storage(Swift)概述
    OpenStack 组成 架构
    云计算 概述
    OpenStack概述
    C语言位运算、移位运算 经典示例
    Python数据库访问之SQLite3、Mysql
  • 原文地址:https://www.cnblogs.com/glf1160/p/8664838.html
Copyright © 2020-2023  润新知