• django中的filter(), all(), get()


    1. 类名.objects中的get(), filter(), all() 的区别

    结论:

    (1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

             例如有Book表,其包含bookname,booknum两个属性, 如何使用Objects.all(),得到bookname和booknum的值

    For b in Book.objects.all():
    
         Print(b.bookname, b.booknum)

    (2)filter() 返回的是QuerySet对象,与all()相似,只是all()是查询所有数据,常用:filter表示‘ = ’,exclude表示’ != ’。

    (3)get()返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。

    例:

    下面定义两个模型类,分别为BookInfo, HeroInfo, BookInfo与HeroInfo为一对多的关系,代码如下:

    from django.db import models
    
    class BookInfoManager(models.Manager):
        def get_queryset(self):
            return super(BookInfoManager,self).get_queryset().filter(isDelete=False)
        def create(self, btitle, bpub_date):
            b = BookInfo()
            b.btitle = btitle
            b.bpub_date = bpub_date
            b.bread = 0
            b.bcommet = 0
            b.isDelete = False
            return b
    
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20)
        bpub_date = models.DateTimeField()
        bread = models.IntegerField(default=0)
        bcommet = models.IntegerField(default=0)
        isDelete = models.BooleanField(default=False)
        class Meta:
            db_table = 'bookinfo'  #  此处不定义表名的话,默认表名为应用名+模型类名(小写)
        books1 = models.Manager()
        books2 = BookInfoManager()
    
    class HeroInfo(models.Model):
        hname = models.CharField(max_length=20)
        hgender = models.BooleanField(default=False)
        isDelete = models.BooleanField(default=True)
        hcontent = models.CharField(max_length=100)
        hbook = models.ForeignKey(BookInfo)
        class Meta:
            db_table = 'heroinfo'

    插入数据后的表格为:

    bookinfo:

    heroinfo:

     查看  类名.objects中的get(), filter(), all()  得到的结果是什么,如下

    通过type(),查看它们的类型

    可以看出,通过get()查询,返回的结果为模型类对象,使用get方法会直接执行sql语句获取数据(不可迭代),而filter()以及all()返回的结果为查询集(QuerySet)对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

     2. 涉及外键的一些查询记录:

    (1)查询涉及外键的属性时,得到的结果为外键所关联的模型类,如下图(查询HeroInfo的hbook属性,得到的是BookInfo模型类)

    (2)知道外键关联的一个模型类(列表中的一行数据),可查出所有与此模型类关联的所有模型类,如 知道id为1

    的book,可以通过HeroInfo.objects.filter(hbook=book)查出id为1的book所包含的所有英雄信息

  • 相关阅读:
    2015年要做的150件事
    再见2014,你好2015
    页面滚动事件的使用
    简单的进度条演示
    mybatis foreach批量处理
    mysql执行顺序
    spring声明式事务 同一类内方法调用事务失效
    Semaphore
    springmvc使用JSR-303对复杂对象进行校验
    springmvc全局异常后返回JSON异常数据
  • 原文地址:https://www.cnblogs.com/jj1106/p/11022077.html
Copyright © 2020-2023  润新知