zoukankan      html  css  js  c++  java
  • orm分组,聚合查询,执行原生sql语句

    from   django.db.models  import Avg

    from app01 import models

    annotate:(聚合查询)


    ret=models.Article.objects.values('up_count').annotate(a=Avg('comment_count')).values('up_count','a')


    #原理讲解:之前这个是按照这个up_count来分组的,后面这个是求这个平均的值,后面是打印出什么值出来,
    a=Avg('comment_count')这个相当于sql语句的select  Avg(comment_count) as  a

    '''
    注明一下,当这个annotate前面是什么,那么这个后面就按照什么来分组,比如这个前面这个分组的字段有很多值的话,那么后面就是求它的平均值,如果是all的话,就是那这个全部的数据进行分组(失去了意义)
    '''

    print(ret)

    结果:

    <QuerySet [{'up_count': 0, 'a': 0.0}, {'up_count': 1, 'a': 55.0}, {'up_count': 100, 'a': 10.0}]>

    extra:(可以在orm数据操作时候额外在extra里面加上sql语句)

     '''
    讲解:
    这个下面的步骤就是相当于后面的up_count>10,是一个筛选的条件,也就是up_count as choice,extra里面
    完整的sql语句是:
    select up_count>10 as choice ,article.title,article.up_count FROM Article
    '''
    ret=models.Article.objects.values('title','up_count').extra(
    select={'choice':'up_count>11'}
    )


    print(ret)
    for i in ret:
    print(i)


    结果:

    <QuerySet [{'title': 'python基础', 'up_count': 1}, {'title': 'go的操作', 'up_count': 100}, {'title': 'go的天然并发', 'up_count': 0}, {'title': 'linux高级指令', 'up_count': 1}]>
    {'title': 'python基础', 'up_count': 1}
    {'title': 'go的操作', 'up_count': 100}
    {'title': 'go的天然并发', 'up_count': 0}
    {'title': 'linux高级指令', 'up_count': 1}

    例子:

        ret=models.Article.objects.all().extra(
    select={'choice':'up_count>11'}
    )
    ##这个choice当成一个筛选的条件,当条件为真的时候,就是1,为假就是0

    print(ret)
    for i in ret:
    print(i.up_count,i.title,i.choice)

    结果:

    <QuerySet [<Article: python基础>, <Article: go的操作>, <Article: go的天然并发>, <Article: linux高级指令>]>
    1 python基础 0
    100 go的操作 1
    0 go的天然并发 0
    1 linux高级指令 0

    执行原生sql语句:


    连接这个sql,执行这个sql的语句:
    from django.db import connection
    cursor=connection.curson()获取这个光标,等待执行这个sql的语句
    curson.execute("这个里面是sql的语句")
    row=cursor.fetchone()
    这个row就是最终的执行的结果

  • 相关阅读:
    【转】如何保护自己的QQ号
    13. 查看数据库对象间的依赖关系
    12. 查询数据库账号的所有权限
    11. 查询数据库各种历史记录
    如何找回SQL Server实例安装时的序列号
    SQL Server Mobile/Compact Edition 简单介绍
    6. SQL Server数据库监控
    5. SQL Server数据库性能监控
    4. SQL Server数据库状态监控
    3. SQL Server数据库状态监控
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/9785012.html
Copyright © 2011-2022 走看看