ORM
ORM
ORM简介
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
ORM是“对象-关系-映射”的简称。(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy
,是和他很像的,但是django
的orm
没有独立出来让别人去使用,虽然功能比sqlalchemy
更强大,但是别人用不了)
ORM数据库操作
#python的类
class Employee(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
gender=models.BooleanField()
birthday=models.DateField()
department=models.CharField(max_length=32)
salary=models.DecimalField(max_digits=8,decimal_places=2)
#python的类对象
#添加一条表纪录:
emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")
emp.save()
#查询一条表纪录:
Employee.objects.filter(age=24)
#更新一条表纪录:
Employee.objects.filter(id=1).update(birthday="1989-10-24")
#删除一条表纪录:
Employee.objects.filter(name="alex").delete()
ORM创建表的字段与参数
字段
CharField
# 字符串字段, 用于较短的字符串
# CharField 要求必须有一个参数 max_length, 用于从数据库层和Django校验层限制该字段所允许的最大字符数(16为1字符)
IntegerField
# 用于保存一个整数
DecimalField
# 一个浮点数.
# 必须提供两个参数, max_digits, 总位数(不包括小数点和符号), decimal_places,小数位数
AutoField
# 一个IntegerField, 添加记录时会自动增长
# 不指定主键, 系统会自动添加一个主键字段到model中
BooleanField
# 布尔值, true/false
TextField
# 一个容量很大的文本字段
EmailField
# 一个带有检查Email合法性的 CharField, 没有max_length 参数
DateField
# 一个日期字段
# Argument, 描述. auto_now, 当对象被保存时(更新或添加都行), 自动将该字段的值设置为当前时间, 通常用于表示"last-modified"时间戳. auto_now_add, 当对象首次被创建时, 自动将该字段的值设置为当前时间, 通常用于表示对象创建时间
DateTimeField
# 一个日期时间字段, 类似 DateField, 支持同样的参数
FileField
# 一个文件上传的字段
# 必须有的一个参数:upload_to, 一个用于保存上传文件的本地系统路径,这个路径必须包含strftime,该格式将被上传文件的date/time替换
ImageField
# 类似FileField, 要校验上传的对象是否是一个合法图片
# 两个参数:height_field 和 width_field, 图片按照提供的高度和宽度规格保存
# 注意:在一个 model 中使用 FileField 或 ImageField 需要以下步骤: (1)在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件.(出于性能考虑,这些文件并不保存到数据库.) 定义MEDIA_URL 作为该目录的公共 URL. 要确保该目录对WEB服务器用户帐号是可写的. (2) 在你的 model 中添加 FileField 或 ImageField, 并确保定义了 upload_to 选项,以告诉 Django使用 MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT).出于习惯你一定很想使用 Django 提供的 get_<#fieldname>_url 函数.举例来说,如果你的 ImageField叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 这样的方式得到图像的绝对路径.
参数
null
# 如果为True, Django 将用NULL在数据库中存储空值, 默认值是False
blank
# 如果为True, 字段允许不填, 默认为False.如果为False, 字段必填
default
# 字段的默认值, 可以是一个值或者可调用对象, 每有新对象被创建, 它都会被调用, 如果字段没有设置可以为空, 之后添加字段要给一个default值
primary_key
# 如果为True, 这个字段就是模型的主键.没有指定, Django会自动添加一个IntegerField字段作为主键
unique
# 该值设置为True, 这个数据字段的值在整张表必须是唯一的
choices
# 由两个元组组成的可迭代对象, ((1,'男'),(2,'女')),用来给字段提供选择项
db_index
# 设置为True, 则代表着为此字段设置数据库索引
Datetime, DateField, TimeField这三个时间字段, 可设置以下参数:
auto_now_add
# 设置为True, 创建数据记录时会把当前时间添加到数据库
auto_now
# 设置为True, 每次更新数据记录时会更新该字段, 更新为最后一次的修改时间
# 当具有auto_now参数字段的数据更新时, 只能使用save方法更新, 不能使用update方法