python - django (查询、聚合、分组)

2019/03/19 19:58
阅读数 5
#
"""
                    ----  正向查询按字段,反向查询按表名
一: 一对多
    正向查询:(字段对象.关联表.查询字段)
        x_obj = models.Book.objects.filter(xxx).first()
        x_obj.publish.email
    反向查询:(字段对象.要查询的表名小写_set.all())
        x_obj = models.Publish.objects.filter(xxx).first()
        for i in x_obj.book_set.all():
            print(i)
二: 多对对
    正向查询:(字段对象.关联表.all()) 查询所有
        x_obj = modles.Bookobjects.filter(xxx).first()
        for author in x_obj.authors.all():
            print(author.name, author.age)
            
    反向查询:(字段对象.关联表_set.all())
        x_obj = modles.Author.objects.filter(xxx).first()
        for book in x_obj_set.all():
            print(book.title)

三:一对一
    正向查询:(字段对象.关联表名.关联表名字段)
        x_obj = modles.Author.objects.filter(xxx).first()
        x_obj = authorDetail.telephone
        
    反向查询:()
        x_obj = modles.AuthorDetail.objects.filter(xxx).first()
        x_obj.author.name 
        
四:聚合/分组
    
    聚合:
        from django.db.models import Sum,Count,Avg
        ret = models.Book.objects.all().aggregate(price=Sum('price'))
    
    分组:
        1. queryset对象.annotate()
        2. annotate进行分组统计,按前面select 的字段进行 group by
        3. annotate() 返回值依然是 queryset对象,增加了分组统计后的键值对
        
        
        modles.dep.objects.values("name").annotate(c=Count('emp__name')).values('name','c')
            # 查询 dep 表, 按name 分组 , 将 emp下的name字段计数,返回结果是 name字段 和 计数结果
            
        modles.book.objects.values('id').annotate(c=Content(    ))
"""#

 

直接执行原生的SQL语句,类似pymysql的用法
#     from django.db import connection
#     cursor = connection.cursor()  # 获取光标,等待执行SQL语句
#     cursor.execute("""SELECT * from person where id = %s""", [1])
#     row = cursor.fetchone()
#     print(row)

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部