- Peewee 教程
- Peewee - 首頁
- Peewee - 概述
- Peewee - 資料庫類
- Peewee - 模型
- Peewee - 欄位類
- Peewee - 插入新記錄
- Peewee - 選擇記錄
- Peewee - 過濾器
- Peewee - 主鍵和複合鍵
- Peewee - 更新現有記錄
- Peewee - 刪除記錄
- Peewee - 建立索引
- Peewee - 約束
- Peewee - 使用 MySQL
- Peewee - 使用 PostgreSQL
- Peewee - 動態定義資料庫
- Peewee - 連線管理
- Peewee - 關係和連線
- Peewee - 子查詢
- Peewee - 排序
- Peewee - 計數和聚合
- Peewee - SQL 函式
- Peewee - 檢索行元組/字典
- Peewee - 使用者定義運算子
- Peewee - 原子事務
- Peewee - 資料庫錯誤
- Peewee - 查詢構建器
- Peewee - 與 Web 框架整合
- Peewee - SQLite 擴充套件
- Peewee - PostgreSQL 和 MySQL 擴充套件
- Peewee - 使用 CockroachDB
- Peewee 有用資源
- Peewee - 快速指南
- Peewee - 有用資源
- Peewee - 討論
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
廣告