python django对数据表的增删改查操作
新增操作:
方式1:
book = BookInfo(title='西游记',price=99)
book.save()
方式2:
BookInfo.objects.create(title='西游记',price=99)
方式3:
BookInfo.objects.bulk_create(bookinfoList)
修改操作:
方式1:
book = BookInfo.objects.get(id=1)
book.name='西游记'
book.save()
方式2:
BookInfo.objects.filter(name='西游记').update(name='三国演义')
删除操作:
方式1:
BookInfo.objects.get(id=1).delete()
方式2:
BookInfo.objects.filter(id=1).delete()
查询操作:
BookInfo.objects.all()查询所有结果 QuerySet
BookInfo.objects.count()查询该表数据量
过滤查询
book = BookInfo.objects.get(id=1)查询id为1的一条数据 book--QuerySet book.title
BookInfo.objects.filter(title__exact='西游记') 简写为(title='西游记')
BookInfo.objects.filter(title__contains='游')
BookInfo.objects.filter(title__startswith/endswith = '西') 以指定值开头或结尾
以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith
BookInfo.objects.filter(title__isnull=False)
BookInfo.objects.filter(id__in=[1,2,4])
BookInfo.objects.filter(id__gt=3)
gt :大于 (greater then)
gte :大于等于 (greater then equal)
lt :小于 (less then)
lte :小于等于 (less then equal)
BookInfo.objects.exclude(id=3)
year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算
BookInfo.objects.filter(pub_data__year=1993)
BookInfo.objects.filter(pub_data__gt=date(1990,1,1))
查询阅读量大于等于2倍评论量的图书
BookInfo.objects.filter(read_gte=F('comment')*2)
查询阅读量大于20,并且编号小于3的图书
BookInfo.objects.filter(read_gt=20,id__lt=3)
Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或
查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现,Q对象前可以使用~操作符,表示非not
BookInfo.objects.filter(Q(read_gt=20) | Q(pk__lt=3))
使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg(平均),Count(数量),Max(最大),Min(最小),Sum(求和),被定义在django.db.models中,aggregate的返回值是一个字典类型
BookInfo.objects.aggregate(Sum('read'))
排序
BookInfo.objects.all().order_by('read')
BookInfo.objects.all().order_by('-read')降序
分组查询
User.objects.values('is_active').annotate(total=Count('id')) values分组的依据 annotate查询的内容
关联查询
一对多:
book = BookInfo.objects.get(id=1)
herio = book.herioinfo_set.all()
多对一
herio = Herioinfo.objects.get(id=1)
book = herio.book
id = book_id
关联过滤查询
由多模型类条件查询一模型类数据
BookInfo.objects.filter(heroinfo__name='孙悟空')
由一模型类条件查询多模型类数据:
Herioinfo.objects.filter(book__read__gte=30)
查询集 QuerySet 对查询集可以再次调用过滤器进行过滤
all():返回所有数据。
filter():返回满足条件的数据。
exclude():返回满足条件之外的数据。
order_by():对结果进行排序。
创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数