精华内容
下载资源
问答
  • django查询集QuerySet

    2020-05-17 12:41:25
    django查询集QuerySet1.概念2.两大特性1.惰性执行2.缓存3.限制查询集 1.概念 Django的ORM中存在查询集的概念。 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django...

    1.概念

    Django的ORM中存在查询集的概念。
    查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。
    当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):
    1. all():返回所有数据。
    2. filter():返回满足条件的数据。
    3. exclude():返回满足条件之外的数据。
    4. order_by():对结果进行排序。
    对查询集可以再次调用过滤器进行过滤,如

    BookInfo.objects.filter(bread__gt=30).order_by('bpub_date')
    

    也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。
    SQL的角度讲,查询集与select语句等价,过滤器像where、limit、order by子句。
    判断某一个查询集中是否有数据:
    exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

    2.两大特性

    1.惰性执行

    创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
    例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集qs

    qs = BookInfo.objects.all()
    

    继续执行遍历迭代操作后,才真正的进行了数据库的查询

    for book in qs:
        print(book.btitle)
    

    2.缓存

    使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
    情况一:如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。

    from booktest.models import BookInfo
    [book.id for book in BookInfo.objects.all()]
    [book.id for book in BookInfo.objects.all()]
    

    情况二:经过存储后,可以重用查询集,第二次使用缓存中的数据。

    qs=BookInfo.objects.all()
    [book.id for book in qs]
    [book.id for book in qs]
    

    3.限制查询集

    可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。
    注意:不支持负数索引。
    对查询集进行切片后返回一个新的查询集,不会立即执行查询。

    如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。

    示例:获取第1、2项,运行查看。

    qs = BookInfo.objects.all()[0:2]
    
    展开全文
  • Django查询集+联表查询模型的三种关系查询书中含有西的英雄一本书中有多少个英雄F对象Q对象,或 总是忘记,还是记录下来把… 模型的三种关系 查询书中含有西的英雄 假定书和英雄是一对多的关系 hbook写在Hero中,...

    总是忘记,还是记录下来把…

    模型的三种关系

    查询书中含有西的英雄

    假定书和英雄是一对多的关系
    hbook写在Hero中,通过hbook找到book类

    Hero.object.filter(hbook__name__contains='西')
    

    一本书中有多少个英雄

    需要分组:先values_list,再annotate

    Hero.objects.values_list('hbook_id').annotate(Count('id'))
    
    hbook_id:hbook在Hero类中,hbook__id找到书籍的id;
    annotate('id'):id是自动对values_list自动生成的,第一个,第二个...
    

    在这里插入图片描述

    如果values_list()中不写某一列,都会列出来,如果写了[(id,个数),(2,3),…]
    在这里插入图片描述

    F对象

    字段A和字段B的比较
    求书,阅读量大于评论量的

    from django.db.models import *
    Book.objects.filter(bread__gt = F(‘bcomment’))

    Q对象,或

    求阅读量=2,且 评论量=10的书
    Book.objects.filter(bcomment=10,bread=1)
    
    求阅读量=2,或 评论量=10
    一个Q表示一个条件,中间+ |
    Book.objects.filter(Q(bread=2)|Q(bcomment=10))
    

    分组

    成交统计站,按照instrumentid,tradingday,ruleid分组

    tradeVolumeSum=Ruletrade.objects.values(
    'tradingday','ruleid','instrumentid').annotate(
    volumetradedsum = Sum('volumetraded'))
    
    # 结果打印
    '''
    <QuerySet [
    {'tradingday': '20200520', 'ruleid': 0, 'instrumentid': 'au2010', 'volumetradedsum': 14, 'amounttrade':200}, 
    {'tradingday': '20200521', 'ruleid': 0, 'instrumentid': 'ag2009', 'volumetradedsum': 394}, 
    '''
    
    

    django Groupby参考文档

    raw

    raw是用sql的方式取数据,主要用于两张表,多张表无法取数据的情况下

    项目中成交统计用到这个:
    关联t_ruletrade,t_instrument用instrumentid,exchangeid字段。

    raw参考文档

    1.sql语句先调通
    2.得到的返回值是RawQuerySet类型的
    
    
    trade_RawQuerySet = Ruletrade.objects.raw('''SELECT
                                                 t1.TradingDay,
                                                 t1.TradeID,
                                                 t1.Direction,
                                                 t1.InstrumentID,
                                                 t1.ExchangeID,
                                                 t1.RuleID,
                                                 SUM(300*t1.VolumeTraded*t1.TradePrice) AS F_IF,
                                                 SUM(200*t1.VolumeTraded*t1.TradePrice) AS F_IC,
                                                 SUM(10000*t1.VolumeTraded*t1.TradePrice) AS F_TF_T,
                                                 SUM(t1.VolumeTraded/100*t1.TradePrice) AS B_D,
                                                 SUM(t1.VolumeTraded*t1.TradePrice) AS E_U,
                                                 SUM(t1.VolumeTraded) AS VolumeTradedSum,
                                                 t2.CommodityType AS InstrumentCommodityType,
                                                 t2.UnderlyingMultiple
                                             FROM
                                                 t_ruletrade t1,
                                                 t_instrument t2
                                             WHERE
                                                 t1.InstrumentID = t2.InstrumentID
                                             AND t1.ExchangeID = t2.ExchangeID
                                             GROUP BY
                                                 t1.InstrumentID, t1.RuleID, t1.TradingDay''')
    
    3.取值:
    result_list = []
    for row in trade_RawQuerySet:
       res_dict = {}
       res_dict['tradingday'] = row.tradingday
       res_dict['ruleid'] = row.ruleid
       res_dict['instrumentid'] = row.instrumentid
       res_dict['volumetradedsum'] = row.VolumeTradedSum
       result_list.append(res_dict)
    
    取值时,Ruletrade.objects.raw(),
    Ruletrade中的字段用小写,
    非Ruletrade的字段用select...SQL中的字段名获取值。
    
    展开全文
  • django查询集-17

    2018-11-15 22:57:00
    当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 。 查询集可以使用过滤器进行再次处理。 例如查询阅读量大于20且评论数大于30的书 >>> book = Book....

    当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合

    查询集可以使用过滤器进行再次处理。

    例如查询阅读量大于20且评论数大于30的书

    >>> book = Book.objects.filter(b_read__gt=20)
    >>> book.filter(b_comment__gt=30)
    <QuerySet [<Book: 天龙八部>]>

    因为查询集类似一个集合,所以可以对查询集进行取下标或者切片等操作(索引不支持负数)。

    查询阅读数大于20的结果,再取下标为1 的数据。

    >>> book = Book.objects.filter(b_read__gt=20)
    >>> book[1]
    <Book: 雪山飞狐>

    查询集两大特性

    1. 惰性执行

    创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

    2. 缓存

    使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。

    转载于:https://www.cnblogs.com/mxuanli/p/9966703.html

    展开全文
  • Django光标分页 您的项目描述在这里 文献资料 完整的文档位于 。 快速开始 安装django-cursor-pagination: pip install django-cursor-pagination 然后在项目中使用它: import cursor_pagination 特征 去做
  • 它现在所做的只是从 django 上的模型中调用查询集。 GET 方法是我测试的,其他方法很快就会实现。 现在仅以 json 格式响应 ##configuration 只需将其放在您的 urls.py 中,其中模型是您的应用程序模型: from ...
  • 查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像...

    查询集

    查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集,查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。

    返回查询集的过滤器如下:

    • all():返回所有数据。
    • filter():返回满足条件的数据。
    • exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字。
    • order_by():对结果进行排序。

    返回单个值的过滤器如下:

    • get():返回单个满足条件的对象
      • 如果未找到会引发"模型类.DoesNotExist"异常。
      • 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。
    • count():返回当前查询结果的总条数。
    • aggregate():聚合,返回一个字典。

    判断某一个查询集中是否有数据:

    • exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

    两大特性

    • 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用。
    • 缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。

    示例:查询所有

    list=BookInfo.objects.all()
    

    查询集的缓存

    每个查询集都包含一个缓存来最小化对数据库的访问。

    在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。

    情况一:如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。(可以看到图中查询了两次)

    from booktest.models import BookInfo
    [book.id for book in BookInfo.objects.all()]
    [book.id for book in BookInfo.objects.all()]
    

    在这里插入图片描述
    情况二:经过存储后,可以重用查询集,第二次使用缓存中的数据。(可以看到图中只查询了一次)

    list=BookInfo.objects.all()
    [book.id for book in list]
    [book.id for book in list]
    

    在这里插入图片描述

    限制查询集

    可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。

    注意:不支持负数索引。

    对查询集进行切片后返回一个新的查询集,不会立即执行查询。

    如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。

    示例:获取第1、2项,运行查看。【0,2】含前不含后,即含0,1。

    list=BookInfo.objects.all()[0:2]
    
    展开全文
  • 类似于 模糊查询 like endswith 以 xx 结束 也是like contains contains:是否包含,大小写敏感,filter(sname__contains='赵') isnull,isnotnull isnull,isnotnull:是否为空,filter(sname__...
  • 我们在用Python Django开发秒杀系统的时候,要将Django 查询到商品详细信息保存到Redis缓存中去,但Redis不能直接保存对象,但有什么方法呢?我们发现可用Python的pickle模块。pickle模块可以序列化对象并保存到磁盘...
  • 跨关系查询: 模型: class Grade(models.Model): g_name = models.CharField(max_length=16) class Student(models.Model): s_name = models.CharField(max_length=16) s_grade = models.ForeignKey(Gr...
  • 查询集:表示从数据库获取的对象的集合,查询集可以有多个过滤器 过滤器:过滤器就是一个函数,给予所有的参数限制查询集结果,返回查询集的方法称为过滤器 查询经过过滤器筛选后返回新的查询集,所以可以写成链式...
  • 数据表视图 该软件包与jQuery插件结合使用,并通过支持状态保存检测。... 添加到INSTALLED_APPS (这样就可以发现默认模板和js),并像Django ListView一样使用DatatableView : # settings.py INSTALLED_APP
  • 一个未求值的查询集进行切片通常返回另一个未求值的查询集,但是如果你使用切片的”step“参数,Django 将执行数据库查询并返回一个列表。对一个已经求值的查询集进行切片将返回一个列表。 还要注意,虽然对未求...
  • http://www.cnblogs.com/linxiyue/p/4040262.html 转载于:https://blog.51cto.com/11990649/1872769
  • django 中用于取代sql,用于数据表查询的语法叫做ORM查询集,但是在实用查询集的时候一般只能通过filter获取等值属性,例如:OB.filter(number=3),而一旦使用不等号,就会报错例如: q = OB.objects.filter...
  • 在 ^{pr2}$ 由于查询集结果记录一个接一个地出现,我们可以说它是按行排列的,但是对于这个模板中的这个例子,我想创建一个html表,结果应该是这样的。。在-------------------------------------------- |id | 1 | ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,296
精华内容 4,518
关键字:

django查询集