Peewee - SQL 函数
美国国家标准协会 (ANSI) 结构化查询语言 (SQL) 标准定义了许多 SQL 函数。
像下面这样的聚合函数在 Peewee 中很有用。
AVG() - 返回平均值。
COUNT() - 返回行数。
FIRST() - 返回第一个值。
LAST() - 返回最后一个值。
MAX() - 返回最大值。
MIN() - 返回最小值。
SUM() - 返回总和。
为了实现这些SQL函数,Peewee有一个SQL辅助函数fn()。 在上面的示例中,我们使用它来查找每个城市的记录数。
以下示例构建了一个使用 SUM() 函数的 SELECT 查询。
使用前面定义的模型中的 Bill 和 Item 表,我们将显示 Bill 表中输入的每个项目的数量总和。
Item 项目表
带有数据的项目表如下 −
Id | Item Name | Price |
---|---|---|
1 | Laptop | 25000 |
2 | Printer | 12000 |
3 | Router | 4000 |
Bill 账单表
账单表如下 −
Id | Item_id | Brand_id | Quantity |
---|---|---|---|
1 | 1 | 3 | 5 |
2 | 2 | 2 | 2 |
3 | 3 | 4 | 5 |
4 | 2 | 2 | 6 |
5 | 3 | 4 | 3 |
6 | 1 | 3 | 1 |
示例
我们在 Bill 和 Item 表之间创建一个连接,从 Item 表中选择项目名称,从 Bill 表中选择数量总和。
from peewee import * db = SqliteDatabase('mydatabase.db') class BaseModel(Model): class Meta: database = db class Item(BaseModel): itemname = TextField() price = IntegerField() class Brand(BaseModel): brandname = TextField() item = ForeignKeyField(Item, backref='brands') class Bill(BaseModel): item = ForeignKeyField(Item, backref='bills') brand = ForeignKeyField(Brand, backref='bills') qty = DecimalField() db.create_tables([Item, Brand, Bill]) qs=Bill.select(Item.itemname, fn.SUM(Bill.qty).alias('Sum')) .join(Item).group_by(Item.itemname) print (qs) for q in qs: print ("Item: {} sum: {}".format(q.item.itemname, q.Sum)) db.close()
以上脚本执行以下 SELECT 查询 −
SELECT "t1"."itemname", SUM("t2"."qty") AS "Sum" FROM "bill" AS "t2" INNER JOIN "item" AS "t1" ON ("t2"."item_id" = "t1"."id") GROUP BY "t1"."itemname"
输出
输出结果如下 −
Item: Laptop sum: 6 Item: Printer sum: 8 Item: Router sum: 8