创建模型
models.py
class Student(models.Model):
# Create your models here.
name = models.CharField(max_length=10, unique=True)
age = models.IntegerField(default=18)
gender = models.BooleanField(default=1)
# auto_now_add创建数据时,默认create_time字段为当前时间
create_time = models.DateTimeField(auto_now_add=True, null=True)
# 修改的时间,每次update学生信息时,修改改字段的时间为当前时间
operate_time = models.DateTimeField(auto_now=True, null=True)
class Meta:
# 指定Student模型映射到数据库中,对应的表名
db_table = 'student'
生成迁移文件 python manage.py makemigrations
进行迁移 python manage.py migrate
在views.py下进行增删改查
增
方法1
stu = Student()
stu.name = '小明'
stu.save()
方法2
Student.objects.create(name='柯南')
删
student.objects.filter(name='柯南').delete()
更新
方法1
stus = Student.objects.filter(name='龙蟠路')
stu = stus[0]
方法2
stu = Student.objects.filter(name='龙蟠路').first()
stu.name = '小明'
stu.save()
方法3
Student.objects.filter(name='龙蟠路4图').update(name='莉哥')
查询(重点)
相关知识点介绍
1.模型成员objects
Django默认通过模型的objects对象实现模型数据查询
2.过滤器
查询集表示从数据库获取的对象集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询的结果
从SQL角度来说,查询集合和select语句等价,过滤器就像where条件
Django有两种过滤器用于筛选记录
filter : 返回符合筛选条件的数据集
exclude : 返回不符合筛选条件的数据集
多个filter和exclude可以连接在一起查询
有以下过滤器
all() 返回所有数据
filter() 返回符合条件的数据
exclude() 过滤掉符合条件的数据
order_by() 排序
values() 一条数据就是一个字典,返回一个列表
3.查询单个数据
get():返回一个满足条件的对象。如果没有返回符合条件的对象,会应该模型类>DoesNotExist异常,如果找到多个,会引发模型类MultiObjectsReturned异常
first():返回查询集中的第一个对象
last():返回查询集中的最后一个对象
count():返回当前查询集中的对象个数
exists():判断查询集中是否有数据,如果有数据返回True,没有返回False
4.比较运算符
contains:是否包含,大小写敏感
startswith,endswith:以values开头或者结尾,大小写敏感 。
以上的运算符前加上i(ignore)就不区分大小写了。
isnull,isnotnull:是否为空。filter(name__isnull=True)
in:是否包含在范围内。filter(id__in=[1,2,3])
gt,gte,lt,lte:大于,大于等于,小于,小于等于。filter(age__gt=10)
pk:代表主键,也就是id。filter(pk=1)
5.聚合函数agregate()
函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
6.F对象/Q对象
F对象:可以使用模型的A属性与B属性进行比较
F对象支持算数运算
7.Q对象:
Q()对象就是为了将过滤条件组合起来
当我们在查询的条件中需要组合条件时(例如两个条件“且”或者“或”)时。我们可以使用Q()查询对象
使用符号&或者|将多个Q()对象组合起来传递给filter(),exclude(),get()等函数
Q()对象的前面使用字符“~”来代表意义“非”
查询年龄是18岁的学生对象
stus = Student.objects.filter(age=18)
查询姓名是莉哥的学生对象的值
stus = Student.objects.filter(name='莉哥').values()
结果
{'id': 11,
'name': '莉哥',
'age': 18, 'gender': True,
'create_time': datetime.datetime(2018, 11, 27, 8, 3, 52, 141901, tzinfo=),
'operate_time': datetime.datetime(2018, 11, 27, 8, 3, 52, 144904, tzinfo=)}
查询所有学生对象的值
stus_value = Student.objects.all().values()
查询所有学生对象的姓名
stus = Student.objects.all()
stu_names = [stu.name for stu in stus]
查询学生对象中的第一个
stus = Student.objects.all().first()
查询是叫莉哥的学生对象
#get()获得唯一一个满足条件的对象,且查询条件必须存在,不然会报错
stu = Student.objects.get(name='莉哥')
查询不是叫大明的学生对象
stus = Student.objects.exclude(name='大明')
查询年龄等于18岁而且名字是叫莉哥
stus =Student.objects.filter(age=18,name='莉哥')
通过学生对象的id(主键)排序
#-id是降序,id是升序
stus =Student.objects.all().order_by('-id')
查询姓名中包含莉的信息
contains 类似于like'%莉%'(大小写敏感)
stus =Student.objects.filter(name__contains='莉')
查询学生对象姓名中以莉结尾的
endswith 类似于like'%莉'
stus = Student.objects.filter(name__endswith='莉')
查询学生对象姓名中以莉开头的
startswith endswith 类似于like'莉%'
stus = Student.objects.filter(name__startswith='莉')
in 查询学生对象主键是1,2,11
stus = Student.objects.filter(id__in=[1,2,11])
pk 查询学生对象主键是1,2,14 pk(主键)=id
stus = Student.objects.filter(pk__in=[1,2,14])
查询学生对象中年龄小于19岁的
大于,__gt 大于等于, __gte
小于,__lt 小于等于,__lte
stus = Student.objects.filter(age__lt=19)
聚合(aggregate)
查看学生对象平均年龄
stu_age = Student.objects.all().aggregate(Avg('age'))
查看学生对象总的年龄
sum_age = Student.objects.all().aggregate(Sum('age'))
Q对象
与 或 非
并且条件 查询年龄是18并是性别女生
stus = Student.objects.filter(Q(age=18), Q(gender=0))
stus = Student.objects.filter(Q(age=18) & Q(gender=0))
或者条件 查询年龄是18或是性别女生
stus = Student.objects.filter(Q(age=18)| Q(gender=0))
非条件 查询年龄不是18或是性别女生
stus = Student.objects.filter(~Q(age=18) | Q(gender=0))
F对象
查询语文成绩比数学成绩大的学生
socre = Student.objects.filter(chinese__gt=F('maths'))
查询语文成绩比数学成绩大9分的学生
socre = Student.objects.filter(chinese__gt=F('maths')+9)
'''
stu_names = [stu.name for stu in stus]列表推导式
相当于
stu.names=[]
for stu in stus:
stu_names.append(stu.name)
return HttpResponse(stu_names)
'''
网友评论