Django 学习笔记 - Model
Django Model
ORM
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
使用 ORM 的好处:
- 提高开发效率。
- 不同数据库可以平滑切换。
使用 ORM 的缺点:
- ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
- 长期写 ORM 代码,会降低编写 SQL 语句的能力。
ORM 解析过程:
- 1、ORM 会将 Python 代码转成为 SQL 语句。
- 2、SQL 语句通过 pymysql 传送到数据库服务端。
- 3、在数据库中执行 SQL 语句并将结果返回。
ORM 对应关系表:
以上源自菜鸟教程↑
一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段
模型字段的定义
字段类型
-
AutoField():一个IntegerField,根据可用ID自动递增。如果没指定主键,就创建它自动设置为主键。
-
IntegerField():一个整数;
-
CharField(max_length = None):字符串字段
-
DateField(auto_now=False, auto_now_add=False):日期
-
TextField():一个很长的的文本字段
-
BooleanField():布尔字段;
-
OneToOneField(to, on_delete, parent_link = False):一对一
-
ForeignKey(to, on_delete):一对多
-
ManyToManyField(to):多对多
-
FileField(upload_to='uploads/') 上传文件,
-
ImageField() 保存图像文件,自动判断是否为图像
字段参数
-
null:如果设置为True,当该字段为空时,Django会将数据库中该字段设置为NULL,默认为False 。尽量避免将此参数设为True
-
blank:如果设置为True,该字段允许为空。默认为False。
-
default:该字段的默认值。可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象。
-
db_column: 定义当前字段在数据表中的列名,未指定则使用字段名作为列名
-
primary_key:如果设置为 True ,将该字段设置为该模型的主键。
-
editable:如果设为False,那么当前字段将不会在admin后台或者其它的ModelForm表单中显示,同时还会被模型验证功能跳过。参数默认值为True。
-
unique:如果设置为 True,在整个数据表内该字段数据不可重复
模型操作
模型操作部分基于下方代码
from django.db import models
class Student(models.Model):
s_name = models.CharField(max_length=20)
s_age = models.IntegerField(default=18)
新增
-
Student.objects.create(s_name='Tom')
-
stu=Student(s_name='Tom') stu.save()
-
stu=Student() stu.s_name='Tom' stu.save()
-
Student.objects.get_or_create(s_name='Tom') # 先查询再创建,返回一个元组:(object,True/False)
查询
-
all():返回一个包含所有对象的QuerySet
Students.objects.all()
-
get():返回一个特定查询条件的单个对象
- 查询条件没有匹配的对象,会抛异常,DoesNotExist
- 如果查询条件对应多个对象,会抛异常,MultipleObjectsReturned
Student.objects.get(id=1)
-
exclude() 返回不符合筛选条件的数据集
-
order_by() 排序
-
values() 返回一个列表。列表中每个元素都是 一个字典
-
distinct() 去重
-
reverse() 反转查询集的顺序
-
exists() 是否有数据
查询条件
- gt 大于
- lt 小于
- gte 大于等于
- lte 小于等于
- in 在某一集合中
- isnull 是否为空
- contains 类似于 模糊查询 like
- startswith 以xx开始 本质也是like
- endswith 以 xx 结束 也是like
- exact 完全符合
- 前面同时添加i , ignore 忽略大小写
- iexact
- icontains
- istartswith
- iendswith
聚合函数
-
用aggregate()函数返回聚合函数的值
- Avg:平均值
- Count:计数
- Max:最大
- Min:最小
- Sum:求和
Student.objects().aggregate(Max('sage'))
F对象
一个F()对象表示一个模型字段或注释的列的值。它可以引用模型字段值并使用它们执行数据库操作,而无需将它们从数据库中拉出到Python内存中。
stu=Student.objects.get(pk=1)
stu.s_age=F('a_ge')+1
stu.save()
Q对象
封装一组字段查询操作。使用Q()实例字段查询后,可以进行&|~等条件的查询。
Student.objects.filter(Q(sage__lt=25))