python - django (查詢、聚合、分組)


#
"""
                    ----  正向查詢按字段,反向查詢按表名
一: 一對多
    正向查詢:(字段對象.關聯表.查詢字段)
        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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM