ORM

ORM

ORM简介

​ MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动

​ ORM是“对象-关系-映射”的简称。(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是djangoorm没有独立出来让别人去使用,虽然功能比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方法
posted @ 2019-11-26 17:45  边城bei  阅读(85)  评论(0编辑  收藏  举报