Peewee - Field 字段类
Model 模型类包含一个或多个属性,这些属性是 Peewee 中 Field 类的对象。 Base Field 类不直接实例化。 Peewee 为等效的 SQL 数据类型定义了不同的子类。
Field 类的构造函数有以下参数 −
Sr.No | 构造函数 & 描述 |
---|---|
1 | column_name (str) 指定字段的列名。 |
2 | primary_key (bool) 字段为主键 |
3 | constraints (list) 应用于列的约束列表 |
4 | choices (list) 二元组的可迭代映射列值以显示标签。 |
5 | null (bool) 字段允许 NULL。 |
6 | index (bool) 在字段上创建索引。 |
7 | unique (bool) 在字段上创建唯一索引。 |
8 | Default 默认值。 |
9 | collation (str) 字段的排序规则名称。 |
10 | help_text (str) 用于字段、元数据目的的帮助文本。 |
11 | verbose_name (str) 用于字段、元数据用途的详细名称。 |
Field 字段类的子类映射到各种数据库中对应的数据类型,即SQLite、PostgreSQL、MySQL等
Numeric 数值字段类
Peewee 中的数字字段类如下 −
Sr.No | 字段类 & 描述 |
---|---|
1 | IntegerField 用于存储整数的字段类。 |
2 | BigIntegerField 用于存储大整数的字段类(分别映射到SQLite、PostgreSQL和MySQL中的integer、bigint和bigint类型)。 |
3 | SmallIntegerField 用于存储小整数的字段类(如果数据库支持)。 |
4 | FloatField 存储浮点数的字段类对应真实数据类型。 |
5 | DoubleField 用于存储双精度浮点数的字段类映射到相应SQL数据库中的等效数据类型。 |
6 | DecimalField 用于存储十进制数字的字段类。 参数如下所述 −
|
Text 文本字段
Peewee 中可用的文本字段如下 −
Sr.No | 字段 & 描述 |
---|---|
1 | CharField 用于存储字符串的字段类。 最多 255 个字符。 等效的 SQL 数据类型是 varchar。 |
2 | FixedCharField 用于存储定长字符串的字段类。 |
3 | TextField 用于存储文本的字段类。 在 SQLite 和 PostgreSQL 中映射到 TEXT 数据类型,在 MySQL 中映射到 longtext。 |
Binary 二进制字段
Peewee 中的二进制字段解释如下 −
Sr.No | 字段 & 描述 |
---|---|
1 | BlobField 用于存储二进制数据的字段类。 |
2 | BitField 用于在 64 位整数列中存储选项的字段类。 |
3 | BigBitField 用于在二进制大型对象 (BLOB) 中存储任意大位图的字段类。 该字段将根据需要增加底层缓冲区。 |
4 | UUIDField 用于存储通用唯一标识符 (UUID) 对象的字段类。 映射到 Postgres 中的 UUID 类型。 SQLite 和 MySQL 没有 UUID 类型,它存储为 VARCHAR。 |
日期和时间字段
Peewee中的日期时间字段如下 −
Sr.No | 字段 & 描述 |
---|---|
1 | DateTimeField 用于存储 datetime.datetime 对象的字段类。 接受一个特殊的参数字符串格式,日期时间可以用它来编码。 |
2 | DateField 用于存储 datetime.date 对象的字段类。 接受一个特殊的参数字符串格式来编码日期。 |
3 | TimeField 用于存储 datetime.time 对象的字段类接受特殊参数格式以显示编码时间。 |
因为 SQLite 没有 DateTime 数据类型,这个字段被映射为字符串。
ForeignKeyField 外键字段
此类用于在两个模型中建立外键关系,从而在数据库中建立相应的表。 此类使用以下参数实例化 −
Sr.No | 字段 & 描述 |
---|---|
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) );
在SQLiteStuidio GUI工具中验证时,表结构如下 −
其他字段类型
Peewee 中的其他字段类型包括 −
Sr.No | 字段 & 描述 |
---|---|
1 | IPField 用于有效存储 IPv4 地址(作为整数)的字段类。 |
2 | BooleanField 用于存储布尔值的字段类。 |
3 | AutoField 用于存储自增主键的字段类。 |
4 | IdentityField 使用新的 Postgres 10 IDENTITY 列类型存储自动递增主键的字段类。 列类型。 |