• Django ORM操作


    ORM简介

    对象关系映射(Object Relational Mapping,简称ORM)模式,简单说就是用面向对象的思想去操作数据库。

    ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。 

    ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

     

    优点:

    让软件开发人员专注于业务逻辑的处理,提高了开发效率,

    有效减少出现重复SQL语句的概率。

    缺点:

    在一定程度上牺牲程序的性能,

    复杂的需求实现有一定的困难

    增删改查操作

    增(creat)

    删(delet)

    改(update)

    count() , 查询结果个数

    Student.object.all().count()

    values(),将对象的内容序列化成字典,json

    Student.object.all().values()

    exclude() , 将满足条件的信息过滤掉

    Student.object.exclud(age=23).all()

    order_by() 

    Student.object.all().order_by('id') #升序
    Student.object.all().order_by('-id') # 降序

    get()

    条件必须成立且查询结果只能是一个

    filter ()



    查询
    模糊查询
    # 字段__contains, 包含
    Student.object.filter(s_name_conains='小').all()

    # 字段__startwith, 以什开始
    Student.object.filter(s_name__startwith='朱').all

    # 字段__endwith, 以什么结尾
    Student.object.filter(s_name_endiwth='龙').all()


    # in, 在列表中
    Student.object.filter(id__in=[1,3,4,5,9]).all()

    # gt, 大于。 gte, 大于等于
    # lt, 小于。 lte 小于等于
    Student.object.filter(id__gt=10).all()


    聚合查询 aggregate
    Avg, Max, Min, Sum, Count,
    from django.db.models import Avg,Sum
    Student.object.all().aggregate(Avg())


    F

    我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较。如果我们要对两个字段的值做比较,那该怎么做呢❓

    Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。


    from django.db.models import F,Q
    # SQL: select * from Student where yuwen > shuxue;
    Student.object.filter(yuwen__gt = F('shuxue')) # 语文成绩大于数学成绩
    Student.object.filter(yuwen__gt = F('shuxue')+10) # 语文成绩大于数学成绩10分


    Q 且 或 非

    Stundet.object.filter(s_name_contains='小',age=23).all() # 多个条件用 逗号隔开是 且 操作
    Stundet.object.filter(Q(s_name_contains='小')|Q(age=23)).all()  # 或
    Stundet.object.filter(~Q(s_name_contains='小')).all()  # 非





    表关联

    一对一(OneToOne)

    一对多(ForeignKey)

    多对多(ManyToMany)

  • 相关阅读:
    XAML语言
    Sqlite 数据库插入标示字段 获取新Id 及利用索引优化查询
    提高C#编程水平的50个要点 ——学生的迷茫
    734条高频词组笔记
    C#读取ini配置文件
    MD5加密
    SQL Server 2000 及 2005 端口修改
    Java控制台程序20例
    Tomcat 6.0+ SQL Server 2005连接池的配
    阿里巴巴离职DBA 35岁总结的职业生涯
  • 原文地址:https://www.cnblogs.com/zhuyalong/p/14522928.html
Copyright © 2020-2023  润新知