模型
1.相关指令
1.版本切换指令
./manage.py migrate 应用名称 版本号
2.通过数据库自动导出models类
./manage.py inspectdb > 文件名.py
模型中的CRUD
1.增加数据
1.Entry.objects.create(属性=值,属性=值)
返回值:
插入成功:则返回创建好的实体对象
插入失败:则返回 None
2.创建一个Entry对象,并通过save()进行保存
obj = Entry(属性=值,属性=值)
obj.属性 = 值
obj.save()
无返回值,保存成功后,obj会被重新赋值
3.通过字典创建Entry对象,并通过save()进行保存
dic = {
'属性1':'值1',
'属性2':'值2',
}
obj = Entry(**dic)
obj.save()
2.查询数据(重难点)
通过 Entry.objects 调用查询接口函数
Entry.objects.all()
Entry.objects 提供了对该实体的所有的数据的查询
所有的接口函数,都可以通过一个 query 属性来得到所对应的sql语句
Entry.objects.all().query
1.获取所有查询结果
方法:all()
用法:Entry.objects.all()
返回:QuerySet(查询结果集,本质是一个封装了若干对象的列表)
2.查询返回指定列
方法: values() | values('列名1','列名2')
作用:查询表中数据的部分列,封装到字典中,再封装到QuerySet中
返回:QuerySet(查询结果集,本质是一个封装了若干字典的列表)
3.查询返回指定列
方法:values_list()
作用:将数据封装到元组中再封装到列表中
4.排序方法
方法:order_by()
语法:Entry.objects.order_by('列1','-列2')
默认是升序排序,列名前加-,则表示降序排序
5.查询只返回一条数据
方法:get(条件)
注意:
该方法只适用于只能查询出一条结果的场合
如果查询多于一条数据或没查询出结果都会抛出异常
返回:单个实体对象
6.根据条件查询部分行
方法:filter(条件)
返回:QuerySet
ex:
1.查询 Author 实体中 id=1 的信息
authors=Author.objects.filter(id=1)
非等值条件需要使用Field Lookups(查询谓词)
语法:Entry.objects.filter(属性__查询谓词=值)
注意:
1.每个查询谓词都是一个独立的功能条件
__exact : 等值条件判断
__gt : 大于条件判断
__year : 得到日期中的年份再进行进一步判断
__contains : 模糊查询 '%xxx%'
__range : 模糊查询 between and
... ...
2.所有支持条件查询的位置处都支持查询谓词
filter() , get() , exclude()
7.对条件取反
方法:exclude(条件)
ex:
Author.objects.exclude(id=1)
select * from index_author where not(id=1)
8.聚合查询(不带分组)
方法:aggregate(列名=聚合函数('列'))
ex:
Author.objects.aggregate(sumAge=Sum('age'))
聚合函数:
1.Avg() : 平均值
2.Count() : 数量
3.Sum() : 求和
4.Min() : 求最小值
5.Max() : 求最大值
9.聚合查询(带分组)
方法:annotate(名=聚合函数('列'))
ex:
按 id 分组 查询平均年龄
Author.objects.values('id').annotate(avgAge=Avg('age')).all()
集结 where,分组查询,having 于一体的查询接口
Author.objects
.filter(id__gte=3) # where 子句
.values('isActive') # group by 子句
.annotate(avgAge=Avg('age')) # 查询聚合函数
.filter(avgAge__gte=30) # having 子句
3.修改数据
1.修改单个实体
1.查
通过 get() 查询出要修改的实体
2.改
通过实体对象的属性赋值
3.保存
通过实体对象save()方法保存数据回数据库
2.批量修改数据
调用QuerySet的update(属性=值,属性=值)实现批量修改
4.删除数据
调用实体对象/查询结果集的 delete() 完成删除
1.删除单个对象
au=Author.objects.get(id=1)
au.delete()
2.批量删除
auList = Author.objects.all()
auList.delete()
F查询 和 Q查询
1.F()
作用:在执行过程中获取某列的值
语法:
from django.db.models import F
F('列名') :得到对应列的值
Author.objects.all().update(age=F('age')+10)
2.Q()
作用:在查询条件中可以完成 or 操作
from django.db.models import Q
Q(条件1)|Q(条件2)
查询 id大于等于3 或 年龄 < 40 的人的信息
Author.objects.filter(Q(id__gte=3)|Q(age__lt=40))
原生的数据库操作方法
1.查询
函数:raw(sql语句)
语法:Entry.objects.raw(sql)
返回:QuerySet
2.增删改
from django.db import connection
def doSQL(request):
with connection.curso() as cursor:
sql = "update index_author set age=age+10"
cursor.execute(sql)
return ''
想要看更多的课程请微信关注SkrEric的编程课堂