zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/zhuyalong/p/14522928.html
Copyright © 2011-2022 走看看