Peewee 字段类


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

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

序号 构造函数和描述
1

列名(字符串)

指定字段的列名。

2

主键(布尔)

字段是主键。

3

约束(列表)

应用于列的约束列表

4

选择(列表)

可迭代的 2 元组映射列值以显示标签。

5

空(布尔)

字段允许 NULL。

6

指数(布尔)

在字段上创建索引。

7

独特的(布尔)

在字段上创建唯一索引。

8

Default

默认值。

9

排序规则(str)

字段的排序规则名称。

10

帮助文本(字符串)

用于字段、元数据目的的帮助文本。

11

详细名称(字符串)

字段的详细名称,元数据目的。

Field类的子类映射到各种数据库中对应的数据类型,即SQLite、PostgreSQL、MySQL等。

数值字段类


Peewee 中的数值字段类如下:

序号 字段类和描述
1

整数字段

用于存储整数的字段类。

2

大整数字段

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

3

小整数字段

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

4

浮点场

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

5

双场

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

6

十进制字段

用于存储十进制数的字段类。参数如下:

  • max_digits (int) -- 要存储的最大位数。

  • decimal_places (int) -- 最大精度。

  • auto_round (bool) -- 自动舍入值。

文本字段


Peewee 中可用的文本字段如下:

序号 字段和描述
1

字符域

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

2

固定字符字段

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

3

文本域

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

二进制字段


Peewee 中的二进制字段解释如下:

序号 字段和描述
1

斑点字段

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

2

BitField

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

3

大比特场

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

4

UUID 字段

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

Date and Time fields


Peewee中的日期和时间字段如下:

序号 字段和描述
1

DateTimeField

用于存储 datetime.datetime 对象的字段类。接受一个特殊的参数字符串格式,可以用它来编码日期时间。

2

DateField

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

3

时间场

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

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

外键字段


此类用于在两个模型中建立外键关系,从而在数据库中建立各自的表。使用以下参数实例化该类:

序号 字段和描述
1

型号(型号)

模型参考。如果设置为“self”,则它是一个自引用外键。

2

场(场)

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

3

反向引用(str)

用于反向引用的访问器名称。 “+”禁用反向引用访问器。

4

on_delete (str)

ON DELETE 动作。

5

on_update (str)

ON UPDATE 动作。

6

懒加载(布尔)

当访问外键字段属性时,获取相关对象。如果为 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)
);

在 SQLiteStuidio GUI 工具中验证后,表结构如下:

ForeignKey Field SQLite Stuidio GUI Tool

其他字段类型


Peewee 中的其他字段类型包括:

序号 字段和描述
1

IPField

用于有效存储 IPv4 地址的字段类(作为整数)。

2

布尔字段

用于存储布尔值的字段类。

3

自动场

用于存储自增主键的字段类。

4

身份字段

使用新的 Postgres 10 存储自增主键的字段类 IDENTITY 使用新的 Postgres 10 IDENTITY 列类型存储自动递增主键的字段类。列类型。