Django之模型
Posted huiyichanmian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之模型相关的知识,希望对你有一定的参考价值。
通过操作对象方法,来进行关系型数据库操作
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘mydb‘, ‘HOST‘: ‘localhost‘, ‘PORT‘: 3306, ‘USER‘: ‘root‘, ‘PASSWORD‘: ‘123456‘, } }
? 继承Model类(django.db.models.Model)
from django.db import models # Create your models here. class Student(models.Model): name = models.CharField(max_length=20) sex = models.CharField(max_length=10) score = models.FloatField() class Meta: #定义表结构的信息 db_table = ‘students‘
模型类对应于数据库表,类属性 对应于表字段
? 创建好模型后,迁移(同步到数据库)
? 1.制作迁移计划
? python manage.py makemigrations
? 2.执行计划任务
? python manage.py migrate
【以下操作都是在shell环境中执行】
进入shell 环境
python manage.py shell
2.添加数据
2.1通过模型类的对象管理器插入记录
【此方法是直接操作数据库】
# 导入Student包 from myapp.models import Student stu1 = Student.objects.create(name=‘aaa‘,sex=‘m‘,score=95. 0)
2.2 实例化模型对象插入记录
【注意:通过对象模型进行 插入操作是在内存中执行的,需要通过save函数加载到数据库中】
stu3 = Student(name=‘a‘,sex=‘m‘,score=89) stu3.save()
3.添加记录
3.1通过模型类的对象管理器插入记录
语法:模型类名.objects.create(类属性=值)
【此方法是直接操作数据库】
# 导入Student包 from myapp.models import Student stu1 = Student.objects.create(name=‘aaa‘,sex=‘m‘,score=95. 0)
stu3 = Student(name=‘a‘,sex=‘m‘,score=89) stu3.save()
stu = Student.objects.get(id=1) stu.score = 100 stu.save() stu.delete()
1.查询主键为1的记录 stu = Student.objects.get(id=1) get()返回一条记录【即查询条件为唯一值且必须存在,一般查询主键】,以模型对象表示
查询所有: students1 = Student.objects.all() 返回Django的QuerySet对象,可以被遍历
4.2过滤查询
模型类名.objects.filter(查询条件)
s1 = Students.objects.filter(sex=‘m‘) 返回Django中的QuerySet容器,可以被遍历 多条件查询,查询条件使用,隔开表示逻辑与 s1 = Student.objects.filter(sex=‘m‘,name=‘aaa‘)
查询分数小于85的学生记录
students = Student.objects.exclude(score__gte=85)
字段后面跟双下划线"__",表示特殊查询 常用的双下划线魔法参数有: __year __month __day __startswith __endswith __gte 大于等于 __lte 小于等于 __contains (相当于模糊查询) s1 = Student.objects.filter(name__startswith=‘a‘)
s1 = Student.objects.all()[1:3] 查询前三个 s1 = Student.objects.all()[:3] 查询奇数条记录 s1 = Student.objects.all()[::2]
4.6排序查询
模型类名.objects.order_by("排序字段名")
降序 s1 = Student.objects.order_by(‘-score‘) 升序 s1 = Student.objects.order_by(‘score‘) 查询成绩前三名 s1 = Student.objects.order_by(‘-score‘)[:3]
# 模糊查询 使用原生sql查询名字中包含a的记录 s1 = Student.objects.raw(‘select * from students where nam e like "%%a%%"‘) 相当于select * from students where name like "%a%" # 使用占位符 查询名字为张三,性别为男的学生信息,使用原生sql语句 s1 = Student.objects.raw(‘select * from students where nam e="%s" and sex="%s"‘%(‘张三‘,‘男‘)) a=‘张三‘ b=‘男‘ s1 = Student.objects.raw(‘select * from students where na me="{a}" and sex="{b}"‘) s1 = Student.objects.raw(‘select * from students where nam e=%s and sex=%s‘,[‘张三‘,‘男‘])
4.8Q查询
通过实例化Q对象,将Q对象传递到filter()、get()方法中可以组合出多种查询条件
Q查询依赖于Q对象(from django.db.models import Q)
Q对象之间可以使用&、|。在Q对象前加~表示Q封装条件的否定条件
查询男生中90分以上的学生记录 from django.db.models import Q q1 = Q(sex=‘男‘) q2 = Q(score__gte=90) s1 = Student.objects.filter(q1&q2) & :逻辑与 | :逻辑或 ~ :逻辑非
描述数据库层级的操作,而不是内存层级的操作 即,可以直接操作数据库中的数据,而不是先更改缓存,再上传数据库 解决并发性问题 使用F对象更新学生成绩,将1号学生成绩在原有基础上+5分 from django.db.models import F s1 = Student.objects.get(id=1) s1.score = F(‘score‘)+5 s1.save()
4.10 聚合查询
可能要导入的:from django.db.models import Min,Avg,Max,Sum,Count
查询所有学生的平均成绩 from django.db.models import Avg,Max,Min,Count,Sum avg = Student.objects.aggregate(Avg(‘score‘)) avg = Student.objects.all().aggregate(as=Avg(‘score‘)) as 是avg对象的别名 查询结果是一个字典
根据性别查询不同性别的平均值 s1 = Student.objects.values(‘sex‘).annotate(Avg(‘score‘)) .values()方法可以显示对象中某个属性的值,以字典形式存储
以上是关于Django之模型的主要内容,如果未能解决你的问题,请参考以下文章