Skip to content

领域

有 12 种基本模型字段类型以及特殊的ForeignKey 和ManyToMany 字段来建立模型之间的关系。

!!!tip 有关ForeignKey 和ManyToMany 字段检查关系的说明。

每个字段都分配了 sqlalchemy 列类和用于创建 pydantic 模型的 python 类型。

字段类型

细绳

String(max_length: int, min_length: int = None, regex: str = None,) 有一个必需的 max_length 参数。

  • Sqlalchemy 列:sqlalchemy.String
  • 类型(用于 pydantic):str

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

文本

Text() 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.Text
  • 类型(用于 pydantic):str

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

布尔值

Boolean() 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.Boolean
  • 类型(用于 pydantic):bool

整数

Integer(minimum: int = None, maximum: int = None, multiple_of: int = None) 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.Integer
  • 类型(用于 pydantic):int

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

大整数

BigInteger(minimum: int = None, maximum: int = None, multiple_of: int = None) 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.BigInteger
  • 类型(用于 pydantic):int

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

小整数

SmallInteger(minimum: int = None, maximum: int = None, multiple_of: int = None) 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.SmallInteger
  • 类型(用于 pydantic):int

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

漂浮

Float(minimum: float = None, maximum: float = None, multiple_of: int = None) 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.Float
  • 类型(用于 pydantic):float

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

十进制

Decimal(minimum: float = None, maximum: float = None, multiple_of: int = None, precision: int = None, scale: int = None, max_digits: int = None, decimal_places: int = None) 没有必需的参数

您可以使用长度和精度参数或 max_digits 和decimal_places。

  • Sqlalchemy 列:sqlalchemy.DECIMAL
  • 类型(用于 pydantic):decimal.Decimal

!!!tip 有关其他参数的说明,请查看 pydantic 文档。

日期

Date() 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.Date
  • 类型(用于 pydantic):datetime.date

时间

Time(timezone: bool = False) 没有必需的参数。

您可以为时区感知数据库列传递 timezone=True 。

  • Sqlalchemy 列:sqlalchemy.Time
  • 类型(用于 pydantic):datetime.time

日期时间

DateTime(timezone: bool = False) 没有必需的参数。

您可以为时区感知数据库列传递 timezone=True 。

  • Sqlalchemy 列:sqlalchemy.DateTime
  • 类型(用于 pydantic):datetime.datetime

JSON

JSON() 没有必需的参数。

  • Sqlalchemy 列:sqlalchemy.JSON
  • 类型(用于 pydantic):pydantic.Json

大型二进制文件

LargeBinary(max_length) 有一个必需的 max_length 参数。

  • Sqlalchemy 列:sqlalchemy.LargeBinary
  • 类型(用于 pydantic):字节

LargeBinary 长度在某些后端(即 mysql)中用于确定字段的大小,在其他后端中它被简单地忽略,但在 ormar 中它始终是必需的。它应该是文件/字节的最大大小(以字节为单位)。

LargeBinary 也有可选的 represent_as_base64_str: bool = False 旗帜。当设置为 Trueormar 时,将自动将字节值转换为 Base64 解码的字符串,您还可以通过传递 Base64 编码的字符串来设置值。

这样,您就可以通过 API 设置值,即使值不兼容 utf-8,否则在 json 转换期间会失败。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import base64
... # other imports skipped for brevity


base_ormar_config = ormar.OrmarConfig(
    metadata=metadata
    database=database
)


class LargeBinaryStr(ormar.Model):
    ormar_config = base_ormar_config.copy(tablename="my_str_blobs")

    id: int = ormar.Integer(primary_key=True)
    test_binary: str = ormar.LargeBinary(
        max_length=100000, represent_as_base64_str=True
    )

# set non utf-8 compliant value - note this can be passed by api (i.e. fastapi) in json
item = LargeBinaryStr(test_binary=base64.b64encode(b"\xc3\x28").decode())

assert item.test_binary == base64.b64encode(b"\xc3\x28").decode()

# technical note that underlying value is still bytes and will be saved as so
assert item.__dict__["test_binary"] == b"\xc3\x28"

通用唯一标识符

UUID(uuid_format: str = 'hex') 没有必需的参数。

  • Sqlalchemy 列:基于 sqlalchemy.CHAR(36) 或 sqlalchemy.CHAR(32) 字段的 ormar.UUID(分别用于字符串或十六进制格式)
  • 类型(用于 pydantic):uuid.UUID

uuid_format 参数允许“十六进制”(默认)或“字符串”值。

根据格式,数据库中使用 32 或 36 个字符。

样本:

  • “十六进制”格式值 = c616ab438cce49dbbf4380d109251dce (字符(32))
  • “字符串”值= c616ab43-8cce-49db-bf43-80d109251dce (字符(36))

加载时它始终是 python UUID,因此您可以比较它并比较两种格式值之间的值。

枚举

在 ormar -> 中使用枚举有两种方法,一种是使用 sqlalchemy.Enum 列类型的专用枚举字段,另一种是在 ormar 中的任何字段上设置选择。

Enum 字段使用数据库方言特定的 Enum 列类型(如果可用),但如果此字段类型不可用,则回退到 varchar。

选择选项始终遵循所选的数据库字段类型。

因此,使用哪一种取决于您使用的后端以及您想要在枚举字段中使用的列/数据类型。

枚举 - 字段

Enum(enum_class=Type[Enum]) 有一个必需的 enum_class 参数。

  • Sqlalchemy 列:sqlalchemy.Enum
  • 类型(用于 pydantic):类型[Enum]