• 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就是最终的执行的结果

  • 相关阅读:
    wampserver2.2e-php5.3.13 版本 增加 php7 支持
    23种设计模式[3]:抽象工厂模式
    23种设计模式[2]:工厂方法模式
    23种设计模式[1]:单例模式
    [转]设计模式六大原则[6]:开闭原则
    [转]设计模式六大原则[5]:迪米特法则
    [转]设计模式六大原则[4]:接口隔离原则
    [转]设计模式六大原则[3]:依赖倒置原则
    [转]设计模式六大原则[2]:里氏替换原则
    [转]设计模式六大原则[1]:单一职责原则
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/9785012.html
Copyright © 2020-2023  润新知