zoukankan      html  css  js  c++  java
  • 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方法
    
  • 相关阅读:
    应届毕业生简历撰写技巧
    【LeetCode】- Longest Substring Without Repeating Characters
    线性规划
    什么是凸规划
    最优化算法 (一)
    香农定理和频谱效率
    虚函数的用法
    QT学习一
    努力!
    Qslider
  • 原文地址:https://www.cnblogs.com/beichen123/p/11937262.html
Copyright © 2011-2022 走看看