百城学院
活到老 学到老

第一个Django项目:ORM聚合函数

Python xiangbaicheng 2019-03-09 515 1

准备工作:

=> 创建好需要的模型:

models.py front应用下的模型文件:
    from django.db import models
    from django.http import HttpResponse

    class Author(models.Model):
            """作者模型"""
            name = models.CharField(max_length=100)
            age = models.IntegerField()
            email = models.EmailField()
    
    class Meta:
	    db_table = 'author'

    class Publisher(models.Model):
	    """出版社模型"""
	    name = models.CharField(max_length=200)

    class Meta:
	    db_table = 'publisher'

    class Book(models.Model):
	    """图书模型"""
	    name = models.CharField(max_length=200)
	    pages = models.IntegerField()
	    price = models.FloatField()
	    rating = models.FloatField()
	    author = models.ForeignKey("Author",on_delete=models.CASCADE)
	    publisher = models.ForeignKey("Publisher",on_delete=models.CASCADE)

    class Meta:
	    db_table = 'book'

    class BookOrder(models.Model):
	    """图书订单模型"""
	    book = models.ForeignKey("Book",on_delete=models.CASCADE)
	    price = models.FloatField()

    class Meta:
	    db_table = 'book_order'

=> 在视图文件导入相关的模块:

views.py front应用下的视图文件
    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import Book
    from django.db.models import Avg
    from django.db import connection

特别说明:

=> 所有的聚合函数都是放在`django.db.models`下面的。示例代码如下:

from django.db.models import Avg

=> 聚合函数不能单独执行,需要放在一些可以执行聚合函数的方法下面去执行。如aggregate()。示例代码如下:

result = Book.objects.aggregate(Avg('price'))

=> 聚合函数执行完成后,会给这个聚合函数的值取一个名字,默认规则为:字段名__聚合函数名字(小写),如上面的示例中生成的名字为:price__avg。如果不想使用默认名字,可以在进行聚合函数操作时,传递自定义名字,最后生成的名字就是传递的这个名字。示例代码如下:

result = Book.objects.aggregate(avgPrice=Avg('price'))
# 聚合函数执行完后生成的名字为:avgPrice

=> `aggregate`:该方法不会返回一个`QuerySet`对象。而是返回一个字典,字典的key就是聚合函数生成的名称,值就是聚合函数执行后的结果。示例代码如下:

result = Book.objects.aggregate(avgPrice=Avg('price'))
print(result)
# 返回结果为:{'avgPrice': 101.75}

1.Avg:求平均值。

=> 导入模块:

views.py front应用下的视图文件
    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import Book
    from django.db.models import Avg
    from django.db import connection    # 打印执行的SQL语句需要

    def index(request):
	    # 1.获取手游由图书定价的平均值
	    # result = Book.objects.aggregate(Avg('price'))
	    # print(result)
	    # 返回结果为:{'price__avg': 101.75}
	    # print(connection.queries)
	    # 执行的SQL语句为:SELECT *G(`book`.`price`) AS `price__avg` FROM `book`
					
	    result = Book.objects.aggregate(avgPrice=Avg('price'))
	    print(result)
	    # 返回结果为:{'avgPrice': 101.75}
	    print(connection.queries)
	    # 执行的SQL语句为:SELECT *G(`book`.`price`) AS `avgPrice` FROM `book`
	    return HttpResponse('success')
文章分类: 编程语言 Python
文章来源: 百城学院
上一篇:C#发送soap请求 下一篇:Python配置虚拟环境
xiangbaicheng
文章
130
访问
5
粉丝
2
点赞
22
文章分类