13个必会操作总结:
查询方法:
<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5> order_by(*field): 对查询结果排序('-id')/('price')
<6> reverse(): 对查询结果反向排序 >>>前面要先有排序才能反向
<7> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<8> first(): 返回第一条记录
<9> last(): 返回最后一条记录
<10> exists(): 如果QuerySet包含数据,就返回True,否则返回False
<11> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
<12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<13> distinct(): 从返回结果中剔除重复纪录
返回QuerySet对象的方法有
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
返回具体对象的
get()
first()
last()
返回布尔值的方法有:
exists()
返回数字的方法有
count()
例子:
models:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.db import models # Create your models here. class User(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() register_time = models.DateField() def __str__(self): return "对象的名字%s" % self.name
单表操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.test import TestCase # Create your tests here. import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled_orm.settings") import django django.setup() from app01 import models # 新增数据 只要是queryset对象就可以无限制的点queryset方法 # models.User.objects.filter().filter().count() # 基于create创建- # user_obj = models.User.objects.create(name='egon1', age=38, register_time="2017-7-1") # print(user_obj.register_time) # 基于对象的绑定方法创建二 # user_obj = models.User(name='Kevin', age=30, register_time='2019-1-1') # user_obj.save() # from datetime import datetime # ctime = datetime.now() # models.User.objects.create(name='egon', age=18, register_time=ctime) # 修改数据 # user_obj = models.User.objects.filter(name='jason') # print(user_obj) # <QuerySet [<User: User object>, <User: User object>]> # 基于对象的 # user_obj = models.User.objects.filter(name='jason').first() # print(user_obj) # User object # user_obj.age = 18 # user_obj.save() # 基于queryset # models.User.objects.filter(name='Kevin').update(name='kevin', age=66) # 删除数据 # 基于queryset # res = models.User.objects.filter(name='egon') # print(res) # models.User.objects.filter(name='egon').delete() # 基于对象 # user_ob = models.User.objects.filter(name='owen').first() # user_ob.delete() # 查询数据 # 1. all(): 查询所有结果 QuerySet[obj, obj] # 2. filter(**kwargs): 它包含了所给筛选条件相匹配的对象 QuerySet[obj, obj] # res = models.User.objects.filter(name='jason', age=18) # filter内可以放多个限制条件但是需要注意的是多个条件之间是and关系 # 3. get(**kwargs) object # 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误 # res = models.User.objects.get(name='jason') # 不建议使用 # print(res) # 4.exclude(**kwargs): <QuerySet [<User: User object>, <User: User object>, <User: User object>]> # 它包含了与所给筛选条件不匹配的对象 # res = models.User.objects.exclude(name='jason') # print(res) # 5.order_by(*field): 对查询结果排序 QuerySet[obj, obj] # res = models.User.objects.order_by('age') # 默认升序 # print(res) # res = models.User.objects.order_by('-age') # print(res) # 倒序 # res = models.User.objects.order_by('name') # print(res) # 6. reverse() QuerySet[obj, obj] 对查询结果反相排序, 前面要先有排序才能反向 # res = models.User.objects.order_by('name').reverse() # print(res) # 7. count() 返回数据库中匹配查询 # res = models.User.objects.count() # 或 # res = models.User.objects.all().count() # print(res) # 8.first(): 返回第一条记录 obj # res = models.User.objects.all().first() # print(res) # res = models.User.objects.all()[0] # 不支持负数的索引取值 # print(res) # 9.last() : 返回最后一条数据 obj # res = models.User.objects.all().last() # print(res) # 10. exists(): 如果QuerySet包含数据,就返回True,否则返回False # res = models.User.objects.all().exists() # res1 = models.User.objects.filter(name='jason', age=3).exists() # print(res, res1) # 11. values(*field): 返回一个QuerySet --- -个特殊的QuerySet, # 运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典 # res = models.User.objects.values('name', 'age') # QuerySet对象,列表套字典 # print(res) # <QuerySet [{'name': 'jason', 'age': 18}, {'name': 'Aegon1', 'age': 38}]> # 12. values_list() :返回一个QuerySet列表套元组 # res = models.User.objects.values_list('name', 'age') # print(res) # <QuerySet [('jason', 18), ('nick', 44), ('kevin', 66),] # 13.distincat(): 从返回结果中删除重复记录,将去重后的结果返回出来, # res = models.User.objects.distinct() # QuerySet [<User: 对象的名字jason>, <User: 对象的名字nick>,] # print(res) # res = models.User.objects.values('name', 'age') # res1 = models.User.objects.values('name', 'age').distinct() # 【前面去重的对象必须是完全相同的数据才能去重】 # 14. 神奇的双下划线查询 <QuerySet [obj, obj] # 查询年纪大于44岁的用户 # res = models.User.objects.filter(age__gt=34) # print(res) # 查询年纪小于44岁的用户 <QuerySet [<User: 对象的名字jason>,<User: 对象的名字tank>, <User: 对象的名字Aegon1>, <User: 对象的名字jason>]> # res = models.User.objects.filter(age__lt=44) # print(res) # 查询年纪大于44岁的用户 # res = models.User.objects.filter(age__gte=44) # print(res) # 查询名字中包含n的用户 # res = models.User.objects.filter(name__contains='n') # # res = models.User.objects.filter(name__icontains='n') # 忽略大小写 # print(res) # 查询名字以j开头的用户 # res = models.User.objects.filter(name__istartswith='j') # print(res) # 查询注册时间是在2017年的用户 # res = models.User.objects.filter(register_time__year=2017) # sqlite对日期格式用create才会被筛选 # print(res)
补充:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 查询年龄是44或者22或者73的用户 user_obj = models.User.objects.filter(age__in=[22, 28]) print(user_obj) # 查询年龄是16到28范围内的 user_list = models.User.objects.filter(age__range=[16, 28]) print(user_list)