码迷,mamicode.com
首页 > 其他好文 > 详细

DjangoORM的相关操作

时间:2018-06-20 22:45:59      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:第一条   否则   单表   meta   count   def   超过   objects   env   

DjangoORM的相关操作

在python脚本中直接调用Django环境

import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm.settings")
    import django
    django.setup()

一般操作

必知必会13条

class Person(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField(null=True)
    day = models.DateField(null=True)

#<1> all():                 查询所有结果,返回Queryset对象
ret  = models.Person.objects.all()
 
#<2> filter(**kwargs):      查询不到返回一个空的Queryset对象,Queryset对象相当于继承list,具备列表的特性
ret = models.Person.objects.filter(id=1)[0]
 
#<3> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
 ret = models.Person.objects.get(id=1)
 
#<4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象
 ret = models.Person.objects.exclude(name='小黑')
 
#<5> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
ret = models.Person.objects.values('name')
 
#<6> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
ret = models.Person.objects.all().values_list()
 
#<7> order_by(*field):      对查询结果排序
ret = models.Person.objects.all().order_by('day')

#<8> reverse():             对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法
ret = models.Person.objects.all().order_by('day').reverse()
 
#<9> distinct():            从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)
 
#<10> count():              返回数据库中匹配查询(QuerySet)的对象数量。
ret = models.Person.objects.filter(id=1).count()

#<11> first():              返回第一条记录
ret = models.Person.objects.all().first()

#<12> last():               返回最后一条记录
 ret = models.Person.objects.all().last()

#<13> exists():             如果QuerySet包含数据,就返回True,否则返回False
ret = models.Person.objects.exists()

返回QuerySet对象的方法

all()
filter()
exclude()
order_by()
reverse()
distinct()

特殊的QuerySet

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

返回具体对象的

get()
first()
last()

返回布尔值的方法

exists()

返回数字的方法

count()

单表查询之双下划线

#获取id大于1 且 小于4>>>>>>1<id<4
ret = models.Person.objects.filter(id__gt=1,id__lt=4)

#获取id等于1,2,3的数据
ret = models.Person.objects.filter(id__in=[1,2,3,])

#相当于not in
ret = models.Person.objects.exclude(id__in=[1,2,3,])

#获取name字段包含xxx的
ret = models.Person.objects.filter(name__contains='xxx')

#获取name字段包含'xxx'的,大小写不敏感
ret = models.Person.objects.filter(name__icontains='xxx')

#1<=id<=3,等价于SQL的bettwen  and
ret = models.Person.objects.filter(id__range=[1,3])
#类似的还有: startswith,istartswith,endswith,iendswith

#date字段
ret = models.Person.objects.filter(day__year=2018,day__day=20)
    

DjangoORM的相关操作

标签:第一条   否则   单表   meta   count   def   超过   objects   env   

原文地址:https://www.cnblogs.com/guodengjian/p/9206196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!