1. ORM 外键关联查询和多对多关系正反向查询

Class Classes():
    name = CF

class Student():
    name = CF
    class = FK(to="Classes")

class Teacher():
    name = CF
    classes = M2M(to="Classes",related_name="teacher")

简单表结构

    # Fk 正向查找
    obj = models.Student.objects.first()
    print(obj.class_id)

    # FK 反向查找
    obj = models.Classes.objects.first()
    print(obj.student_set.all())

    # M2M 正向查找
    obj = models.Teacher.objects.get(pk=1)
    print(obj.classes.all())

    # M2M 反向查找
    obj = models.Classe.objects.get(pk=1)
    print(obj.teacher.all())

简单实例

2. F查询和Q查询

  F查询可以对当前查询出来的对象取值,就是像自赋值 a = a+20,更新字段方便

from django.db.models import F
from app01.models import Book

Book.objects.update(price=F("price")+20)  # 对于book表中每本书的价格都在原价格的基础上增加20元

F查询

  Q查询可以对当前查询的表进行多次筛选,可以组合使用&, | ,比如查询2005年初生且姓是W开头的, 2005年出生或姓名是W

from django.db.models import Q

obj = student.objects.filter(Q(Bd_year=2005) & Q(name_startswith="W"))

obj = student.objects.filter(Q(Bd_year=2005) | Q(name_startswith="W"))

Q查询

3. ORM事务操作

    from app01 import models

    try:
        from django.db import transaction
        with transaction.atomic():
                (进行事务操作)
    except Exception as e:
        pass    

事务简单实例

4. 连表查询提高性能

#select_related, 连表操作, 相当于主动做join

#prefetch_related, 多次单表操作, 先查询想要的数据, 然后构造条件

    如: id[1,2,3],再次查询其他表根据id做条件

连表查询

5. 通过ORM写原生SQL

# - extra  结果集修改器,是吗一种提供额外查询参数的机制
 books= Book.objects.filter(publish='清华出版社').extra(where=['price>50'])

# - raw  执行原始sql并返回模型实例
books = Book.objects.raw('select * from book where publish="清华出版社"')

- 原生SQL
from django.db import connection
cursor=connection.cursor()                                                    # 建立游标                

cursor.execute("insert into book(name) values('小王子')")                        #插入操作

cursor.execute('update book set name='梦里花落知多少' where name='撒哈拉的故事'') #更新操作

cursor.execute('delete from book where name='小王子'')                           #删除操作

cursor.execute('select * from book')                                          #查询操作
raw = cursor.fetchone()                                                       #读取一条
raw_list = cursor.fetchall()                                           #读取所有,返回list
cursor.close()  #关闭游标

原生SQL

6. 自定义管理器

from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.contrib.auth.models import User

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(status='published')

class Post(models.Model):
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    objects = models.Manager()  # 默认的管理器
    published = PublishedManager()  # 自定义管理器

    def get_absolute_url(self):
        return reverse('blog:post_detail', args=[self.publish.year, self.publish.month, self.publish.day, self.slug])

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title

自定义管理器

Django ORM相关的更多相关文章

  1. Django学习笔记之Django ORM相关操作

    一般操作 详细请参考官方文档 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> ...

  2. Django ORM相关的一些操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 ...

  3. django—ORM相关

    常用的QuerySet方法 1.all() 查询表中所有数据,返回一个QuerySet对象列表 2.filter() 查询满足条件的数据,返回一个QuerySet对象列表 3.get() 查询指定的数 ...

  4. Django框架详细介绍---ORM相关操作

    Django ORM相关操作 官方文档: https://docs.djangoproject.com/en/2.0/ref/models/querysets/ 1.必须掌握的十三个方法 <1& ...

  5. Django ORM那些相关操作zi

    Django ORM那些相关操作   一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs) ...

  6. Django ORM 那些相关操作

    Django ORM 那些相关操作 一般操作 必知必会13条 <> all(): #查询所有的结果 <> filter(**kwargs) # 它包含了与所给筛选条件相匹配的对 ...

  7. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  8. django orm 及常用参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  9. Django ORM中常用字段和参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

随机推荐

  1. 【PostMan】1、Postman 发送json格式请求

    Postman 是一个用来测试Web API的Chrome 外挂软件,可由google store 免费取得并安装于Chrome里,对于有在开发Web API的开发者相当有用,省掉不少写测试页面呼叫的 ...

  2. React-classnames库

    今天在项目中看到了大佬引入了classnames,之前没用过所以去搜了搜,感觉还真的是挺好用的,搜到一篇很不错的文章,跟原创作者交流了一下就转载过来了! 下面废话不多说,我们直接来看文章吧 首先我们我 ...

  3. IDEA项目搭建六——使用Eureka和Ribbon进行项目服务化

    一.Eureka的作用 这里先简单说明使用eureka进行业务层隔离,实现项目服务化也可以理解为微服务,我一直崇尚先实现代码再学习理论,先简单上手进行操作,eureka使用分为三块,1是服务注册中心, ...

  4. Apex 的 Trigger 类简介

    Apex Triggers Apex 触发器(Apex Triggers)是一种特殊的 Apex 类.它的主要作用是在一条记录被插入.修改.删除之前或之后自动执行一系列的操作.每一个 Trigger ...

  5. 生产者与消费者+Queue(线程安全)

    from queue import Queue from lxml import etree import requests from urllib import request from threa ...

  6. 什么是DDoS攻击?DDoS防御的11种方针详解

    对于遭受DDOS攻击的情况是让人很尴尬的,如果我们有良好的DDoS防御方法,那么很多问题就将迎刃而解,我们来看看我们有哪些常用的有效地方法来做好DDoS防御呢. 对于DDoS防御的理解: 对付DDOS ...

  7. python ctypes 探究 ---- python 与 c 的交互

    近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...

  8. 不使用JS实现表单验证

    我们可以给表单元素添加required,pattern属性,还有根据具体元素类型决定的Measureable属性,如:min,max等. required:表示必填. pattern:一般用于type ...

  9. [转]Docker容器可视化监控中心搭建

    [原文链接]https://www.jianshu.com/p/9e47ffaf5e31?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sourc ...

  10. HDU ACM 1869 六度分离(Floyd)

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...