• Django 学习笔记


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

    如果你觉得本文对你有帮助,请随意打赏!
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    HTTP 协议详解
    SQL中Group By的使用
    转mysql 多表 update sql语句总结
    数据库SQL优化大总结之 百万级数据库优化方案
    PHP中include和require的区别详解
    【奇怪的知识二】:部分测试名词解释
    【python】UI自动化测试浏览器内部命令模拟F12
    【python】pip设置永久阿里云镜像源
    【奇怪的知识一】:网页缓存清理
    【python】脚本输出接口json数据为表格
  • 原文地址:https://www.cnblogs.com/y-sh/p/12964683.html
Copyright © 2020-2023  润新知