Django 学习笔记 - Model

Django Model

ORM

Django 模型使用自带的 ORM。

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

img

使用 ORM 的好处:

  • 提高开发效率。
  • 不同数据库可以平滑切换。

使用 ORM 的缺点:

  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力。

ORM 解析过程:

  • 1、ORM 会将 Python 代码转成为 SQL 语句。
  • 2、SQL 语句通过 pymysql 传送到数据库服务端。
  • 3、在数据库中执行 SQL 语句并将结果返回。

ORM 对应关系表:

img

以上源自菜鸟教程↑


一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段

模型字段的定义

字段类型

  • 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)

新增

  1. Student.objects.create(s_name='Tom')

  2. stu=Student(s_name='Tom')
    stu.save()
    
  3. stu=Student()
    stu.s_name='Tom'
    stu.save()
    
  4. Student.objects.get_or_create(s_name='Tom')
    # 先查询再创建,返回一个元组:(object,True/False)
    

查询

  1. all():返回一个包含所有对象的QuerySet

    Students.objects.all()

  2. get():返回一个特定查询条件的单个对象

    • 查询条件没有匹配的对象,会抛异常,DoesNotExist
    • 如果查询条件对应多个对象,会抛异常,MultipleObjectsReturned

    Student.objects.get(id=1)

  3. exclude() 返回不符合筛选条件的数据集

  4. order_by() 排序

  5. values() 返回一个列表。列表中每个元素都是 一个字典

  6. distinct() 去重

  7. reverse() 反转查询集的顺序

  8. exists() 是否有数据

查询条件

  • gt 大于
  • lt 小于
  • gte 大于等于
  • lte 小于等于
  • in 在某一集合中
  • isnull 是否为空
  • contains 类似于 模糊查询 like
  • startswith 以xx开始 本质也是like
  • endswith 以 xx 结束 也是like
  • exact 完全符合
  • 前面同时添加i , ignore 忽略大小写
    • iexact
    • icontains
    • istartswith
    • iendswith

聚合函数

  • 用aggregate()函数返回聚合函数的值

    1. Avg:平均值
    2. Count:计数
    3. Max:最大
    4. Min:最小
    5. 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))

posted @ 2020-05-26 12:03  千里梦江山  阅读(136)  评论(0编辑  收藏  举报