zoukankan      html  css  js  c++  java
  • Django2.2 数据库的模块model学习笔记

    一、前言

      为什么选用Django2.2,因为从2019年下半年起Django2.2逐渐成为长期支持版本,官网也有数据,所以当然选用维护时间长的版本

    二、models的建立

       Django的models也就是你所配置的数据库的表名(Django2.2--mysql连接---https://www.cnblogs.com/cybg/p/11906652.html)

     要注意的是每次的class model建立都需要在控制台执行一次迁移文件----python manage.py migrate

     2.1 objects.filter()与objects.get()的区别

      .相同点:两者均是从数据表中查询满足条件的数据,----并且两者获取的数据类型均为 Queryset

      .不同点:get()获取到的是一条数据----因此往往需要添加try语句来防止没有数据等情况

           filter()获取到的是多条数据----使用更方便----配合F和操作可以方便的在views层来用for 迭代显示数据

    2.2 F与Q运算

      .F运算

    • 可以获取我们属性的值
    • 可以实现一个模型的不同属性的运算操作
    • 还可以支持算数运算

      .Q运算

    • 可以对条件进行封装
    • 封装之后,可以支持逻辑运算

        。与、或、非(&、|、~)

     # companies=Company.objects.filter(c_boys_num__lt=F('c_girls_num')-10)
        # companies=Company.objects.filter(c_boys_num__gt=1).filter(c_girls_num__gt=5)#可用下面的替代
        companies=Company.objects.filter(Q(c_boys_num__gt=1) & Q(c_girls_num__gt=15))#与运算用 &  或运算用 | 表示
        for company in companies:
            print(company.c_name)

     三、模型自定义管理器(模型的显隐性)

      这里先说一下,以下面这个数据表为例,当某条数据需要做删除处理时   ---------------------------(,最好对重要数据做逻辑删除不做物理删除,)

    这里有两种操作方式:

    1. 通过F运算或则filter()来判断这条数据属性的布尔值-----------物理性删除------------在views层显示

        

    #物理性删除
        # animals=Animal.a_m.filter(is_delete=False)
        animals=Animal.objects.all()

        2.通过模型自定义管理器(查数据非常方便)------不通过系统管理器objects-----------自定义管理器,重写all()系统函数来达到逻辑性删除数据

        

    class AnimalManager(models.Manager):
        def get_queryset(self):
            return  super(AnimalManager,self).get_queryset().filter(is_delete=False)class Animal(models.Model):
        a_name=models.CharField(max_length=16)
        is_delete=models.BooleanField(default=False)
    
        # 模型自定义管理器
        objects=AnimalManager()
    
    
    
    -------------------------------------------------
    # 模型自定义管理器(模型的显隐性)
        # animals=Animal.a_m.all()

      

    ----------这里仅更新了模板的三类查询注意点,并不全----------但数据查询这些基本够用了----------------至于删除,更新---------其实都是基于查询

        下期更新Django2.2模板的各种套用显示------------数据均为Mysql数据库动态数据------------不足的还望指正

       

  • 相关阅读:
    包含深度学习常用框架的Docker环境
    Docker快速搭建neural style环境
    kaggle之Grupo Bimbo Inventory Demand
    kaggle之人脸特征识别
    kaggle之识别谷歌街景图片中的字母
    kaggle之数字序列预测
    kaggle之泰坦尼克的沉没
    kaggle之手写体识别
    Promise/Bluebird源码
    redis源码笔记(一) —— 从redis的启动到command的分发
  • 原文地址:https://www.cnblogs.com/cybg/p/11943588.html
Copyright © 2011-2022 走看看