Peewee 简明教程

Peewee - Field Class

Model 类包含一个或多个属性,它们是 Peewee 中 Field 类的对象。不会直接实例化 Base Field 类。Peewee 为等效 SQL 数据类型定义不同的子类。

Field 类的构造函数具有以下参数−

Sr.No

Constructor & Description

1

column_name (str) 为字段指定列名。

2

primary_key (bool) 字段为主键。

3

constraints (list) 用于应用列约束的列表

4

choices (list) 将列值映射到显示标签的可迭代 2 元组。

5

null (bool) Field allows NULLs.

6

index (bool) 在字段中创建索引。

7

unique (bool) 在字段中创建唯一索引。

8

Default Default value.

9

collation (str) 字段的校对名称。

10

help_text (str) 字段的帮助文本,元数据用途。

11

verbose_name (str) 字段的详细名称,元数据用途。

Field 类的子类映射到不同数据库(即 SQLite、PostgreSQL、MySQL 等)中对应的数据库类型。

Numeric Field classes

Peewee 中的数字字段类如下 −

Sr.No

Field classes & Description

1

IntegerField 用于存储整数的字段类。

2

BigIntegerField 用于存储大整数的字段类(分别在 SQLite、PostgreSQL 和 MySQL 中映射到 integer、bigint 和 bigint 类型)。

3

SmallIntegerField 用于存储小整数的字段类(如果数据库支持)。

4

FloatField 用于存储浮点数的字段类对应于实际数据类型。

5

DoubleField 用于存储双精度浮点数的字段类映射到对应 SQL 数据库中的等效数据类型。

6

DecimalField 用于存储十进制数的字段类。参数如下 −max_digits(int)- 要存储的最大数字。decimal_places(int)- 最大精度。auto_round(bool)- 自动舍入值。

Text fields

Peewee 中的文本字段如下 −

Sr.No

Fields & Description

1

CharField 用于存储字符串的字段类。最大 255 个字符。等效的 SQL 数据类型为 varchar。

2

FixedCharField 用于存储固定长度字符串的字段类。

3

TextField 用于存储文本的字段类。映射到 SQLite 和 PostgreSQL 中的 TEXT 数据类型,以及 MySQL 中的 longtext。

Binary fields

下面是对 Peewee 中二进制字段的说明−

Sr.No

Fields & Description

1

BlobField 用于存储二进制数据的字段类。

2

BitField 用于在 64 位整数列中存储选项的字段类。

3

BigBitField 用于在二进制大对象 (BLOB) 中存储任意大小位图的字段类。该字段将根据需要扩充底层缓冲区。

4

UUIDField 用于存储通用唯一标识符 (UUID) 对象的字段类。映射到 Postgres 中的 UUID 类型。SQLite 和 MySQL 没有 UUID 类型,它存储为 VARCHAR。

Date and Time fields

Peewee 中的日期和时间字段如下所示 −

Sr.No

Fields & Description

1

DateTimeField 用于存储 datetime.datetime 对象的字段类。接受特殊参数字符串格式,其中可以对 datetime 进行编码。

2

DateField 用于存储 datetime.date 对象的字段类。接受特殊参数字符串格式进行日期编码。

3

TimeField 用于存储 datetime.time 对象的字段类。接受特殊参数格式以显示编码时间。

由于 SQLite 没有 DateTime 数据类型,所以此字段被映射为字符串。

ForeignKeyField

此类用于在两个模型中建立外键关系,这样就得到了数据库中相应的表。此类使用以下参数进行实例化 −

Sr.No

Fields & Description

1

model (Model) 要引用的模型。如果设置为“self”,它是一个自引用外键。

2

field (Field) 要引用的模型字段(默认为主键)。

3

backref (str) 反向引用的访问器名称。“+”禁用反向引用访问器。

4

on_delete (str) ON DELETE action.

5

on_update (str) ON UPDATE action.

6

lazy_load (bool) 当访问外键字段属性时获取相关对象。如果为 FALSE,则访问外键字段会返回存储在外键列中的值。

Example

以下是 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 图形用户界面工具中验证时,表结构如下所示 −

foreignkey field
sqlitestuidio gui tool

Other Field Types

Peewee 中其他字段类型包括−

Sr.No

Fields & Description

1

IPField 用于高效存储 IPv4 地址(作为整数)的 Field 类。

2

BooleanField 用于存储布尔值的 Field 类。

3

AutoField 用于存储自动增量主键的 Field 类。

4

IdentityField 用于存储使用新 Postgres 10 IDENTITY 用于存储使用新 Postgres 10 IDENTITY 列类型存储自增主键的 Field 类。列类型。