Peewee – SQL函数
美国国家标准协会(ANSI)结构化查询语言(SQL)标准定义了许多SQL函数。
像以下这样的聚合函数在Peewee中很有用。
- AVG() – 返回平均值。
-
COUNT() – 返回行的数量。
-
FIRST() – 返回第一个值。
-
LAST() – 返回最后一个值。
-
MAX() – 返回最大的值。
-
MIN() – 返回最小的值。
-
SUM() – 返回总和。
为了实现这些SQL函数,Peewee有一个SQL辅助函数fn()。在上面的例子中,我们用它来查找每个城市的记录数。
下面的例子建立了一个采用SUM()函数的SELECT查询。
使用前面定义的模型中的账单和物品表,我们将显示在账单表中输入的每个物品的数量之和。
Item table
带有数据的项目表如下所示
ID | 项目名称 | 价格 |
---|---|---|
1 | 笔记本电脑 | 25000 |
2 | 打印机 | 12000 |
3 | 路由器 | 4000 |
Bill table
账单表如下 –
Id | 项目_ID | 品牌_ID | 数量 |
---|---|---|---|
1 | 1 | 3 | 5 |
2 | 2 | 2 | 2 |
3 | 3 | 4 | 5 |
4 | 2 | 2 | 6 |
5 | 3 | 4 | 3 |
6 | 1 | 3 | 1 |
例子
我们在帐单和项目表之间建立一个连接,从项目表中选择项目名称,从帐单表中选择数量之和。
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