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方法
    
  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/beichen123/p/11937262.html
Copyright © 2011-2022 走看看