Peewee - SQL 函式



美國國家標準協會 (ANSI) 結構化查詢語言 (SQL) 標準定義了許多 SQL 函式。

以下聚合函式在 Peewee 中很有用。

  • AVG() - 返回平均值。

  • COUNT() - 返回行數。

  • FIRST() - 返回第一個值。

  • LAST() - 返回最後一個值。

  • MAX() - 返回最大值。

  • MIN() - 返回最小值。

  • SUM() - 返回總和。

為了實現這些 SQL 函式,Peewee 有一個 SQL 輔助函式 fn()。在上面的示例中,我們使用它來查詢每個城市的記錄數。

以下示例構建了一個使用 SUM() 函式的 SELECT 查詢。

使用前面定義的模型中的 Bill 和 Item 表,我們將顯示在 Bill 表中輸入的每個專案的數量總和。

Item 表

包含資料的 Item 表如下所示:

Id 專案名稱 價格
1 筆記型電腦 25000
2 印表機 12000
3 路由器 4000

Bill 表

Bill 表如下所示:

Id Item_id Brand_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

示例

我們在 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
廣告

© . All rights reserved.