- Peewee 教程
- Peewee - 首页
- Peewee - 概述
- Peewee - 数据库类
- Peewee - 模型
- Peewee - 字段类
- Peewee - 插入新记录
- Peewee - 选择记录
- Peewee - 过滤器
- Peewee - 主键和复合主键
- Peewee - 更新现有记录
- Peewee - 删除记录
- Peewee - 创建索引
- Peewee - 约束
- Peewee - 使用 MySQL
- Peewee - 使用 PostgreSQL
- Peewee - 动态定义数据库
- Peewee - 连接管理
- Peewee - 关系和连接
- Peewee - 子查询
- Peewee - 排序
- Peewee - 计数和聚合
- Peewee - SQL 函数
- Peewee - 获取行元组/字典
- Peewee - 用户自定义运算符
- Peewee - 原子事务
- Peewee - 数据库错误
- Peewee - 查询构建器
- Peewee - 与 Web 框架集成
- Peewee - SQLite 扩展
- Peewee - PostgreSQL 和 MySQL 扩展
- Peewee - 使用 CockroachDB
- Peewee 有用资源
- Peewee - 快速指南
- Peewee - 有用资源
- Peewee - 讨论
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 用于存储十进制数的字段类。参数如下:
|
文本字段
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 工具中验证后,表结构如下所示:
其他字段类型
Peewee 中的其他字段类型包括:
| 序号 | 字段和描述 |
|---|---|
| 1 | IPField 用于高效存储 IPv4 地址(作为整数)的字段类。 |
| 2 | BooleanField 用于存储布尔值的字段类。 |
| 3 | AutoField 用于存储自动递增主键的字段类。 |
| 4 | IdentityField 使用新的 Postgres 10 **IDENTITY** 列类型存储自动递增主键的字段类。 |