Peewee – 字段类
模型类包含一个或多个属性,是Peewee中字段类的对象。基础字段类不直接实例化。Peewee为同等的SQL数据类型定义了不同的子类。
字段类的构造函数有以下参数
序号 | 构造函数和描述 |
---|---|
1 | column_name (str) 指定字段的列名。 |
2 | primary_key (bool) 字段是主键。 |
3 | constraints (list) 适用于列的约束列表 |
4 | choices (list) 2-tuples的迭代,将列值映射到显示标签。 |
5 | null (bool) 字段允许NULL。 |
6 | index (bool) 在字段上创建一个索引。 |
7 | unique (bool) 在字段上创建一个唯一索引。 |
8 | Default 默认 值。 |
9 | collation (str) 字段的 排序 名称。 |
10 | help_text (str) 字段的帮助文本,用于元数据。 |
11 | verbose_name (str) 字段的粗略名称,用于元数据目的。 |
字段类的子类被映射到各种数据库中的相应数据类型,如SQLite、PostgreSQL、MySQL等。
数值字段类
以下是Peewee的数字字段类。
序号 | 字段类别及描述 |
---|---|
1 | IntegerField 用于存储整数的字段类。 |
2 | BigIntegerField 用于存储大整数的字段类(在SQLite、PostegreSQL和MySQL中分别映射为整数、大整数和大整数类型)。 |
3 | SmallIntegerField 类,用于存储小整数(如果数据库支持)。 |
4 | FloatField 用于存储浮点数的字段类,对应于真实数据类型。 |
5 | DoubleField 用于存储双精度浮点数的字段类,对应于相应SQL数据库中的等效数据类型。 |
6 | DecimalField 用于存储十进制数字的字段类。参数提到如下- |
- max_digits (int) – 要存储的最大数字。
- decimal_places (int) – 最大精度。
- auto_round (bool) – 自动舍入数值。
文本字段
在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对象的字段类。接受一个特殊的参数字符串格式,可以对日期时间进行编码。 |
2 | DateField 用于存储datetime.date对象的字段类。接受一个特殊的参数字符串格式来编码日期。 |
3 | TimeField 用于存储datetime.time对象的字段类,接受一个特殊的参数格式来显示编码的时间。 |
由于SQLite没有DateTime数据类型,这个字段被映射为字符串。
外键字段
这个类用于在两个模型中建立外键关系,从而在数据库中建立各自的表。这个类在实例化时有以下参数
序号 | 字段和描述 |
---|---|
1 | model (模型) 要参考的模型。如果设置为’self’,它是一个自我参照的外键。 |
2 | field (字段) 在模型上引用的字段(默认是主键)。 |
3 | backref (str) 用于反向引用的访问器名称。”+”禁用反向引用访问器。 |
4 | on_delete (str) ON DELETE动作。 |
5 | on_update (str) ON UPDATE动作。 |
6 | lazy_load (bool) 当 foreign-key 字段属性被访问时,获取相关对象。如果是FALSE,访问外键字段将返回存储在外键列中的值。 |
例子
下面是一个外键字段的例子。
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的其他字段类型包括 –
序号 | 字段和描述 |
---|---|
1 | IPField 用于有效存储IPv4地址的字段类型(整数)。 |
2 | BooleanField 用于存储布尔值的字段类。 |
3 | AutoField 字段类,用于存储自动递增的主键。 |
4 | IdentityField 字段类,用于存储自动递增的主键,使用新的Postgres 10 IDENTITY 字段类,用于存储自动递增的主键,使用新的Postgres 10 IDENTITY列类型。 |