
- 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 - 欄位類
Peewee 中,模型類包含一個或多個 Field 類的物件作為屬性。 不會直接例項化基類 Field。Peewee 定義了不同子類對應於等效的 SQL 資料型別。
Field 類的建構函式具有以下引數:
序號 | 建構函式和描述 |
---|---|
1 | column_name (str) 指定欄位的列名。 |
2 | primary_key (bool) 欄位是否為主鍵。 |
3 | constraints (list) 應用於列的約束列表。 |
4 | choices (list) 一個可迭代的 2 元組列表,將列值對映到顯示標籤。 |
5 | null (bool) 欄位是否允許 NULL 值。 |
6 | index (bool) 在欄位上建立索引。 |
7 | unique (bool) 在欄位上建立唯一索引。 |
8 | 預設值 預設值。 |
9 | collation (str) 欄位的排序規則名稱。 |
10 | help_text (str) 欄位的幫助文字,用於元資料。 |
11 | verbose_name (str) 欄位的詳細名稱,用於元資料。 |
Field 類的子類對映到不同資料庫(例如 SQLite、PostgreSQL、MySQL 等)中對應的資料庫型別。
數值欄位類
Peewee 中的數值欄位類如下所示:
序號 | 欄位類和描述 |
---|---|
1 | IntegerField 用於儲存整數的欄位類。 |
2 | BigIntegerField 用於儲存大整數的欄位類(分別在 SQLite、PostgreSQL 和 MySQL 中對映到 integer、bigint 和 bigint 型別)。 |
3 | SmallIntegerField 用於儲存小整數的欄位類(如果資料庫支援)。 |
4 | FloatField 用於儲存浮點數的欄位類,對應於 real 資料型別。 |
5 | DoubleField 用於儲存雙精度浮點數的欄位類,對映到相應 SQL 資料庫中的等效資料型別。 |
6 | DecimalField 用於儲存十進位制數的欄位類。引數如下:
|
文字欄位
Peewee 中可用的文字欄位如下:
序號 | 欄位和描述 |
---|---|
1 | CharField 用於儲存字串的欄位類。最多 255 個字元。等效的 SQL 資料型別為 varchar。 |
2 | FixedCharField 用於儲存固定長度字串的欄位類。 |
3 | TextField 用於儲存文字的欄位類。在 SQLite 和 PostgreSQL 中對映到 TEXT 資料型別,在 MySQL 中對映到 longtext。 |
二進位制欄位
Peewee 中的二進位制欄位解釋如下:
序號 | 欄位和描述 |
---|---|
1 | BlobField 用於儲存二進位制資料的欄位類。 |
2 | BitField 用於在 64 位整數列中儲存選項的欄位類。 |
3 | BigBitField 用於在二進位制大物件 (BLOB) 中儲存任意大小的點陣圖的欄位類。該欄位將根據需要擴充套件底層緩衝區。 |
4 | UUIDField 用於儲存通用唯一識別符號 (UUID) 物件的欄位類。在 Postgres 中對映到 UUID 型別。SQLite 和 MySQL 沒有 UUID 型別,它儲存為 VARCHAR。 |
日期和時間欄位
Peewee 中的日期和時間欄位如下:
序號 | 欄位和描述 |
---|---|
1 | DateTimeField 用於儲存 datetime.datetime 物件的欄位類。接受一個特殊的引數字串格式,可以使用該格式對 datetime 進行編碼。 |
2 | DateField 用於儲存 datetime.date 物件的欄位類。接受一個特殊的引數字串格式來編碼日期。 |
3 | TimeField 用於儲存 datetime.time 物件的欄位類。接受一個特殊的引數 formats 來顯示編碼的時間。 |
由於 SQLite 沒有 DateTime 資料型別,因此此欄位對映為字串。
ForeignKeyField
此類用於在兩個模型中建立外部索引鍵關係,因此在資料庫中建立相應的表。此類使用以下引數例項化:
序號 | 欄位和描述 |
---|---|
1 | model (Model) 要引用的模型。如果設定為“self”,則它是自引用的外部索引鍵。 |
2 | field (Field) 要引用的模型欄位(預設為主鍵)。 |
3 | backref (str) 反向引用的訪問器名稱。“+”停用反向引用訪問器。 |
4 | on_delete (str) ON DELETE 操作。 |
5 | on_update (str) ON UPDATE 操作。 |
6 | lazy_load (bool) 訪問外部索引鍵欄位屬性時獲取相關物件。如果為 FALSE,訪問外部索引鍵欄位將返回儲存在外部索引鍵列中的值。 |
示例
這是一個 ForeignKeyField 的示例。
from peewee import * db = SqliteDatabase('mydatabase.db') class Customer(Model): id=IntegerField(primary_key=True) name = TextField() address = TextField() phone = IntegerField() class Meta: database=db db_table='Customers' class Invoice(Model): id=IntegerField(primary_key=True) invno=IntegerField() amount=IntegerField() custid=ForeignKeyField(Customer, backref='Invoices') class Meta: database=db db_table='Invoices' db.create_tables([Customer, Invoice])
執行上述指令碼時,將執行以下 SQL 查詢:
CREATE TABLE Customers ( id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, address TEXT NOT NULL, phone INTEGER NOT NULL ); CREATE TABLE Invoices ( id INTEGER NOT NULL PRIMARY KEY, invno INTEGER NOT NULL, amount INTEGER NOT NULL, custid_id INTEGER NOT NULL, FOREIGN KEY ( custid_id ) REFERENCES Customers (id) );
在 SQLiteStudio GUI 工具中驗證後,表結構如下所示:


其他欄位型別
Peewee 中的其他欄位型別包括:
序號 | 欄位和描述 |
---|---|
1 | IPField 用於高效儲存 IPv4 地址(作為整數)的欄位類。 |
2 | BooleanField 用於儲存布林值的欄位類。 |
3 | AutoField 用於儲存自動遞增主鍵的欄位類。 |
4 | IdentityField 使用新的 Postgres 10 **IDENTITY** 列型別儲存自動遞增主鍵的欄位類。 |