1. 模型映射(对象关系映射ORM:objects relationship mapping)
2. 增加
create()方法:
模型名.objects.create(字段1=值,指端2=值)
Student.objects.create(s_name='小明吧')
模型对象.save()
stu = Student()
stu.s_name = '日向雏田'
stu.s_gender = 1
stu.save()
3. 删除
delete()方法:
模型名.objects.filter(条件).delete()
Student.objects.filter(id=1).delete()
4. 更新
update()方法:
模型名.objects.filter(条件).update(字段1=值,字段2=值)
Student.objects.filter(id=3).update(s_name='漩涡鸣人') -->会返回一个更新状态 0 1
save()方法:模型对象.save() -- >推荐使用
stu = Student.objects.filter(id=3).first()
stu.s_name = '日向宁次'
x = stu.save()
注意:update()和save()的区别:是否更新使用auto_now约束条件的字段
5. 查询
5.1 filter()方法:
查询满足条件信息--模型名.objects.filter()条件
1.查询所有学生
stus = Student.objects.all()
for result in stus:
print(result.__
dict__
)
2.查询id为5的学生
Student.objects.filter(id=5).first()
3.查询第一个对象
stus = Student.objects.filter(s_gender=1)[0]
4.返回一个列表
注意:如果查询到多个对象,可以使用下标或者循环遍历--->结果是对象.
5.2 get()方法:
查询指定的条件
stu = Student.objects.get(id=10)
只能返回唯一的一个对象结果,条件必须存在
5.3 exclude()方法:
查询出不满足条件的信息:模型名.objects.exclude(条件)
stus = Student.objects.exclude(s_gender=0)
5.4 order_by()方法:
排序order_by 升序不添加任何,降序在字段前面添加一个负号'-'
1.升序排列
直接使用order_by(字段)默认升序排列
2.降序排列(添加负号)
stus = Student.objects.order_by('-s_age')
5.5 values()方法:
取出查询对象中的字段,存入到字典,比从对象中取出数据要快很多
1.取出对象中的某个字段
stus = Student.objects.all().values('s_name', 's_age')
2.查询到所有字段
stus = Student.objects.all().values()
5.6 exists():
判断结果是否存在,返回值是布尔类型
is_exists = Student.objects.filter(s_name='日向宁次').exists()
5.7 count()方法:
计算结果的条数
查询男的有多少人 count()作用和len(stus)相似
stus = Student.objects.filter(s_gender=1).count()
5.8 运算符
语法:字段__运算符
1. contains:包含
stus = Student.objects.filter(s_name__contains='日向').values('s_name', 's_age', 's_gender')
2. startswith:以什么开始
stus = Student.objects.filter(s_name__startswith='明')
3. endswith:以什么结束
stus = Student.objects.filter(s_name__endswith='明')
4. in:在某个范围之内
pk_in():pk和id一样
stus = Student.objects.filter(id__in=[1, 2, 3, 4, 5, 6])
stus = Student.objects.filter(pk__in=[1, 2, 3, 4, 5, 6])
5. gt,gte:大于,大于等于----lt,lte:小于,小于等于
stus = Student.objects.filter(s_age__gte=18, s_age__lt=20) # 且的操作
5.9 聚合
导包:
from django.db.models import Avg, Max, Count, Min, Sum
聚合函数 Avg, Max, Count, Min, Sum
age_avg = Student.objects.all().aggregate(Avg('s_age'))
print(age_avg, '平均年龄')
count = Student.objects.all().aggregate(Count('s_age'))
print(count, '数量')
5.10 Q(): 类似于sql中的where 条件
1. 与:
Q(条件1),Q(条件2)
Q(条件1)&Q(条件2)
stus = Student.objects.filter(s_age__gte=18, s_age__lt=20) # 且的操作
stus = Student.objects.filter(Q(s_age__gte=18) & Q(s_age__lt=20))
2. 或:
Q(条件1)|Q(条件2)
stus = Student.objects.filter(Q(s_age__lte=18) | Q(s_age__gt=20))
3. 非:
~Q(条件)
stus = Student.objects.filter(~Q(s_age__gte=18))
5.11 F():包裹表中字段
用于比较两个字段,可以使用+,-符号
模型名.objects.filter(physical__gt=F('math') + 10)
stus = Student.objects.filter(physical__gt=F('math') + 10)
5.12 数据库表的更新
模型类中的任意字段修改或者添加字段,都会产生表的变化,此时应该对模型进行迁移,保证与数据库中的表同步.