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

用於儲存十進位制數的欄位類。引數如下:

  • max_digits (int) – 最大儲存位數。

  • decimal_places (int) – 最大精度。

  • auto_round (bool) – 自動舍入值。

文字欄位

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 工具中驗證後,表結構如下所示:

ForeignKey Field SQLite Stuidio GUI Tool

其他欄位型別

Peewee 中的其他欄位型別包括:

序號 欄位和描述
1

IPField

用於高效儲存 IPv4 地址(作為整數)的欄位類。

2

BooleanField

用於儲存布林值的欄位類。

3

AutoField

用於儲存自動遞增主鍵的欄位類。

4

IdentityField

使用新的 Postgres 10 **IDENTITY** 列型別儲存自動遞增主鍵的欄位類。

廣告