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()  # 查存在不

单表的双下划线方法

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.filter(pk__gte=100,pk__lte=103) # 大于等于 -- 小于等于
ret
= models.Person.objects.filter(pk__range=[100,103]) # 什么范围
ret
= models.Person.objects.filter(name__contains = 'l') # 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) # 是否为空

猜你喜欢

转载自www.cnblogs.com/zhangchen-sx/p/10321780.html
今日推荐