在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)