<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
all()
filter()
exclude()
order_by()
reverse()
distinct()
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
get()
first()
last()
exists()
count()
大于数据库
例: django
models.Person.objects.filter(id__gt=4) # 获取id大于4的值
对应的SQL语句:spa
SELECT ... WHERE id > 4;
大于或等于code
小于对象
小于或等于blog
例: 得到id大于2且小于5的值排序
models.Person.objects.filter(id__gt=2, id__lt=5)
给定的是可迭代的, 一般是列表, 元组或者queryset.rem
例:文档
models.Person.objects.filter(id__in=[1, 3]) # 获取id等于1, 3的数据
对应的SQL语句:get
SELECT ... WHERE id IN (1, 3);
区分大小写
例:
models.Person.objects.filter(name__contains='a') # 获取name字段中包含"a"的数据
对应的SQL语句:
SELECT ... WHERE name LIKE '%a%';
不区分大小写
例:
models.Person.objects.filter(name__contains='a') # 获取name字段中包含"a"或者"A"的数据
对应的SQL语句:
SELECT ... WHERE name ILIKE '%a%';
包括两边的边界值
例:
models.Person.objects.filter(id__range=[1, 3]) # id范围是1到3
对应的SQL语句:
SELECT ... WHERE id BETWEEN 1 and 3;
以...开头, 区分大小写
例:
models.Person.objects.filter(name__startswith='a')
对应的SQL语句:
SELECT ... WHERE name LIKE 'a%';
以...开头, 不区分大小写
以...结尾, 区分大小写
以...结尾, 不区分大小写
例:
models.Person.objects.filter(birth__year=2019)
对应的SQL语句:
SELECT ... WHERE birth BETWEEN '2019-01-01' AND '2019-12-31';
语法:
对象.关联字段.字段
例:
book_obj = models.Book.objects.first() # 第一本书对象 print(book_obj.press) # 获得这本书关联的出版社对象 print(book_obj.press.name) # 获得出版社对象的名称
语法:
关联字段__字段
例:
print(models.Book.objects.values('press__name'))
obj = models.Book.objects.filter(press__name='xx出版社') print(obj)
语法:
默认:
obj.表名_set
表名_set能够本身命名
例:
press_obj = models.Press.objects.first() # 找到第一个出版社对象 books = press_obj.books.all() # 找到第一个出版社出版的全部书 titles = books.values_list('title') # 找到第一个出版社出版的全部书的书名 print(books) print(titles)
语法:
表名__字段
例:
titles = models.Press.objects.values_list('books__title') # books__title中的books是本身在models.py中, related_name='books' # 具体的代码: class Book(models.Model): title = models.CharField(max_length=32) press = models.ForeignKey(to='Press', on_delete=models.CASCADE, related_name='books')
"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。
它存在于下面两种状况:
简单来讲就是当 点 后面的对象 可能存在多个的时候就可使用如下的方法。
建立一个新的对象,保存对象,并将它添加到关联对象集之中,返回新建立的对象。
obj = models.Author.objects.first() obj.books.create(title='一块儿来学MATLAB', press_id=2)
把指定的model对象添加到关联对象集中。
obj = models.Author.objects.first()
obj.books.add(*models.Book.objects.all())
obj = models.Author.objects.first()
obj.books.add(*[3, 4])
更新model对象的关联对象
obj = models.Author.objects.first()
obj.books.set([1, 2])
从关联对象集中移除执行的model对象
obj = models.Author.objects.first()
obj.books.remove(1)
从关联对象集中移除一切对象
obj = models.Author.objects.first()
obj.books.clear()
注意:
对于ForeignKey对象,clear() 和 remove() 方法仅在 null=True 时存在。
详情见 Django官方文档