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列类型。 | 
极客教程