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