在django项目中,对mysql的增删改查
1. 引入需要修改的模型
from book.models import BookInfo, PeopleInfo
2. 新增
方法1
book = BookInfo(
name='django入门',
pub_date='2021-1-1',
readcount=10
)
book.save()
方法2
BookInfo.objects.create(
name='python学习之路',
pub_date='2021-9-24',
readcount=20
)
3. 修改数据
方法1
book = BookInfo.objects.get(id=5)
book.name = 'java学习之路'
book.save()
方法2
BookInfo.objects.filter(id=5).update(name='css学习之路', commentcount=60)
3. 删除数据
删除包括两种:物理删除(真实删除) 逻辑删除(标志位)
方法1
book = BookInfo.objects.get(id=5)
book.delete()
方法2
book = BookInfo.objects.get(id=5).delete()
book = BookInfo.objects.filter(id=5).delete()
4. 查询
get 查询单一数据
get 查询一个 如果没有 会出现异常
objects.get(属性名_运算符 = 值)
try:
BookInfo.objects.get(id=6)
except BookInfo.DoesNoExist:
print('查询结果失败')
all 查询所有数据
BookInfo.objects.all()
count查询结果数量
BookInfo.objects.all().count()
BookInfo.objects.count()
5 .过滤查询
filter过滤出多个结果
exclude排除符合条件剩下的结果
objects.filter(属性名_运算符 = 值) n个结果
objects.exclude(属性名_运算符 = 值)
简写(属性名=值)
BookInfo.objects.filter()
查询书名包含 人 的
BookInfo.objects.filter(name__contains='人')
查询书名以 '部’结尾的图书
BookInfo.objects.filter(name__endswith='部')
查询书名为空的书
BookInfo.objects.filter(name__isnull=True)
查询id为1、3、5的数据
BookInfo.objects.filter(id__in=[1, 3, 5])
查询 大于 3
大于 gt
大于等于 gte
小于 lt
小于等于 lte
BookInfo.objects.filter(id__gt=3)
不等于3的图书
BookInfo.objects.exclude(id=3)
查询发布日期 2010
BookInfo.objects.exclude(pub_date__year=2010)
查询发布日期大于 2001.1.1
BookInfo.objects.exclude(pub_date__gt='2001-1-1')
6. 两个属性的比较
from django.db.models import F
语法形式 以filter为例 模型类名.objects.filter(属性名_运算符=F(‘第二个属性名’))
查询阅读量大于评论量的书籍
BookInfo.objects.filter(readcount__gt=F('commentcount'))
查询阅读量大于2倍评论量的书籍
BookInfo.objects.filter(readcount__gt=F('commentcount' * 2))
7. 并且查询
查询阅读量大于20,并且编号小于3的书籍
BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3)
BookInfo.objects.filter(readcount__gt=20, id__lt=3)
8. 或查询
BookInfo.objects.filter(Q(属性名_运算符=值)|Q(属性名_运算符=值)|…)
from django.db.models import Q
BookInfo.objects.filter(Q(id=3) | Q(id=1))
BookInfo.objects.filter(Q(readcount__gt=20) | Q(id=3))
9. ~ 非 操作
BookInfo.objects.filter(~Q(id=3))
10. 聚合函数
模型类名 objects.aggregate(Xxx(‘字段名’))
from django.db.models import Sum, Max, Min, Avg, Count
BookInfo.objects.aggregate(Sum('readcount'))
BookInfo.objects.aggregate(Max('readcount'))
BookInfo.objects.aggregate(Min('readcount'))
BookInfo.objects.aggregate(Avg('readcount'))
BookInfo.objects.aggregate(Count('readcount'))
11. 排序函数
BookInfo.objects.all().order_by('readcount')
BookInfo.objects.all().order_by('-readcount')
12. 级联查询
查询书籍为1 的所有人物
1对多 里面有 隐藏模型 模型小写类名_set
book = BookInfo.objects.get(id=1)
book.peopleinfo_set.all()
查询人物为1的书籍信息
person = PeopleInfo.objects.get(id=1)
13. 关联查询的 过滤查询
语法形式 查询1的数据,条件为n
模块类名 objects(关联模型类名小写__name__运算符=值)
查询图书.图书的人物为 ‘郭靖’
book = BookInfo.objects.filter(peopleinfo__name__exact='郭靖')
book = BookInfo.objects.filter(peopleinfo__name='郭靖')
查询图书,图书的内容有’九’
BookInfo.objects.filter(peopleinfo__description__contains='九')
多对1 有外键的情况下,可以直接查询
查询书籍’天龙八部’的所有人物
PeopleInfo.objects.filter(book__name='天龙八部')
查询图书阅读量大于30的所有人物
PeopleInfo.objects.filter(book__readcount__gt=30)