## ORM操作

    一般操作

      必会部分:

  all()  查询所有结果,最终的结果为QuerySet对象.

models.Press.objects.all()  # 查询所有出版社

  **get(**kwargs)**  返回与所给筛选条件相匹配的对象,返回结果只有一个,如果符合筛选条件的对象超过一个或者一个也没有,就会报错.最终结果为一个对象.

models.Press.objects.get(id=1)  # 查询id等于1的出版社

  **filter(**kwargs)**  它包含了与所给筛选条件相匹配的所有对象,最终返回结果为QuerySet对象.

models.Press.objects.filter(id=1)  # 查询id等于1的所有出版社

  **exclude(**kwargs)**  它包含了与所给筛选条件不匹配的所有对象,最终结果为QuerySet对象.

models.Press.objects.exclude(id=1)  # 查询id不等于1的所有出版社

  values(*field)  返回一个ValueQuerySet —— 一个特殊的QuerySet,运行后得到的并不是一些列的model的实例化对象。而是一个可迭代的字典序列。简单点说就是ValueQuerySet列表中包含着查询到的结果,每一个结果为一个字典,字典中键为field字段,值为查到的结果。当field不写时,查询到所有的字段。

models.Press.objects.all().values()  # 查询所有对形象的所有字段,每条记录为一个字典

models.Press.objects.all().values('id', 'name')  # 查询所有对象的id和name字段,每条记录为一个字典

  values_list(*field)  与values()非常相似,区别就是他返回的是一个元祖序列.

models.Press.objects.all().values_list()  # 查询所有对形象的所有字段,每条记录为一个元祖,顺序为values_list()中填写的字段的顺序

models.Press.objects.all().values_list('id', 'name')  # 查询所有对象的id和name字段,每条记录为一个元祖,顺序为values_list()中填写的字段的顺序

  order_by(*field)  对查询结果进行排序.最终的查询结果为QuerySet对象.当给*field前边加负号(-)时,按降序排序.

1 models.Press.objects.all().order_by('-id')  # 查询结果按照id降序排列.结果为QuerySet对象.
2 
3 models.Press.objects.all().order_by('age','-id')  # 查询结果先按照age字段增序排列,出现相同age时再按照id降序排列.结果为QuerySet对象.

  reverse()  对查询结果进行反序排序,请注意reverse()通常只能在具有已定义排序的QuerySet上调用(在model类的Meta中指定order_by()或者调用ordering方法.).

models.Person.objects.all().reverse()

  distinct()  从返回结果中剔除重复记录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果.此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重.),返回结果为QuerySet对象.

  count()  返回数据库中匹配查询(QuerySet)的对象数量.

models.Person.objects.all().count()

  first()  返回第一条记录(对象),必须是返回结果为QuerySet时才能使用first()

models.Person.objects.all().first()

  last()  返回最有一条记录(对象),必须是返回结果为QuerySet时才能使用last()

models.Person.objects.all().last()

  exists()  如果QuerySet包含数据,就返回True,否则返回False.

models.Person.objects.all().exists()

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

  **字段名__gt**  greater than 大于

ret = models.Person.objects.filter(id__gt=1)  # 查询id大于1的所有对象

  **字段名__lt**  less than 小于

ret = models.Person.objects.filter(id__lt=4)  # 查询id小于4的所有对象

  **字段名__gte**  greater than equal 大于等于

ret = models.Person.objects.filter(id__gte=1)  # 查询id大于等于1的所有对象

  **字段名__lte**  less than equal 小于等于

ret = models.Person.objects.filter(id__lte=1)  # 查询id小于等于1的所有对象

  **字段名__in**  在什么里

ret = models.Person.objects.filter(id__in=[1, 3])  # 查询id在列表里的所有对象

  **字段名__range=[条件1, 条件2]**等价于 字段名__gte=条件1,字段名__lte=条件2,其中逗号(,)表示and关系.[条件1, 条件2]为闭区间.

ret = models.Person.objects.filter(id__gte=1, id__lte=3)  # 查询id大于等于1,小于等于3的所有对象

ret = models.Person.objects.filter(id__range=[1, 3])  # 查询id在1到3之间的所有对象

  **字段名__contains='x'**  模糊查找含有x的所有对象

ret = models.Person.objects.filter(name__contains='e')  # 查询name中含有e的所有对象

  **字段名__icontains='x'**  忽略大小写,模糊查找含有x的所有的对象

ret = models.Person.objects.filter(name__icontains='e')  # 忽略大小,查找name中含有e的所有对象

  **字段名__startswith='o'**  匹配以o开头的所有对象

ret = models.Person.objects.filter(name__startswith='e')  # 匹配name中以e开头的所有对象

  **字段名__istartswith='o'**  忽略大小写,匹配以o开头的所有对象

ret = models.Person.objects.filter(name__istartswith='e')  # 忽略大小写,匹配name中以e开头的所有对象

  **字段名__endswith='x'**  匹配以x结尾的所有对象

ret = models.Person.objects.filter(name__endswith='x')  # 匹配name中以x结尾的所有对象

  **字段名__iendswith='x'**  忽略大小写,匹配以x结尾的所有对象

ret = models.Person.objects.filter(name__iendswith='x')  # 忽略大小写,匹配name中以x结尾的所有对象
  date字段还可以:
models.Class.objects.filter(first_day__year=2017)

猜你喜欢

转载自www.cnblogs.com/zhuyuanying123--/p/11349629.html