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** 列类型存储自动递增主键的字段类。

广告