# 排序: order_by , 默认情况是升序排序
data = Book.objects.order_by('price')for d in data:print(d.book_name , d.price)print('*'*20)# 降序排序 , 在指定的属性名前面加上 '-'
data = Book.objects.order_by('-price')for d in data:print(d.book_name, d.price)print('*'*20)# reverse ,排序翻转,将升序变成降序 , 降序变为升序
data = Book.objects.order_by('price').reverse()for d in data:print(d.book_name, d.price)
# 大小比较# 大于 : gt
data = Book.objects.filter(price__gt=80)# print(data)# 大于等于 :gte
data = Book.objects.filter(price__gte=75.98)# print(data)# 小于 : lt
data = Book.objects.filter(price__lt=75.98)print(data)# 小于等于 :lte
data = Book.objects.filter(price__lte=75.98)print(data)
# between 100 and 500# 取区间:range(100 , 500)
data = Book.objects.filter(inventory__range=(100,520))print(data)
# like %:匹配0到多个字符 _:匹配一个字符(一个下划线匹配一个字符)# startswith 匹配以什么字符开头
data = Book.objects.filter(book_name__startswith='追')# like '追%'print(data)# endswith 匹配以什么字符结尾
data = Book.objects.filter(book_name__endswith='人')# like '%人'print(data)
# 修改数据# 先获取到数据对象 , 再通过对象进行修改
data = Book.objects.get(id=2)# 使用对象.属性名进行重新赋值的操作
data.price=75.23# data.save()# update() 方法修改 , 这个方法可以一次性修改多条数据
data = Book.objects.filter(id=5)# data.update(inventory=300)
data = Book.objects.filter(id__in=[3,8,9])
data.update(inventory=300)
# count 获取到查询的数据对象个数# 直接查询整个表中有多少条数据
data = Book.objects.count()print(data)
data = Book.objects.filter(price__gt=80).count()print(data)# 对查询得到的数据对象查询集进行切片
data = Book.objects.all()print(data)print(data[0:4])
data = Book.objects.filter(id__range=(0,4))print(data)print(data[2])
# 且或非# 且 &
data = Book.objects.filter(price__gt=75, inventory__gte=300)# print(data)# & 这个方式需要查询两个对象进行连接
data = Book.objects.filter(price__gt=75)& Book.objects.filter(inventory__gte=300)# print(data)# 或 |
data = Book.objects.filter(price__lt=75)| Book.objects.filter(inventory__gte=300)print(data)# Q 对象 是进行且或非的运算操作from django.db.models import Q
# Q(条件)
data = Book.objects.filter(Q(price__gt=75)& Q(inventory__gte=300))# print(data)
data = Book.objects.filter(Q(price__lt=75)| Q(inventory__gte=300))# print(data)# 非 ~
data = Book.objects.filter(~Q(price__lt=75))print(data)
# F 表达式 ,直接在数据库中完成修改操作 , 不会将数据对象从数据库中读取到 Python 的内存中from django.db.models import F
data = Book.objects.get(id=10)
data.inventory = F('inventory')+520
data.save()
# 聚合函数# 要使用聚合函数查询的时候需要和 aggregate 方法使用from django.db.models import Max , Min , Sum , Avg
# 集合函数查询返回的结果是一个字典# 字典的键是默认为: 字段名__聚合函数名
data = Book.objects.aggregate(Max('price'))print(data)
data = Book.objects.filter(id__in=[1,5,7]).aggregate(Avg('price'))print(data)# 自定义集合函数查询结果的键名
data = Book.objects.filter(id__in=[1,5,7]).aggregate(price = Avg('price'))print(data)
# 删除数据 delete 方法# 先获取到要删除的数据对象 , 然后再使用 delete 方法
data = Book.objects.get(id=4).delete()print(data)
data = Book.objects.all().delete()print(data)