- 可选字段
在 Redis OM 中,没有设置默认值的字段默认为必填字段。如果想要让字段变为可选(允许为空),需要使用 Python 标准库的 Optional 类型注解,并将默认值设为 None。
示例代码:
from typing import Optional
from redis_om import HashModel
class Customer(HashModel):
first_name: str
last_name: str
<span># 可选字段,默认值为 None</span>
bio: Optional[str] = None
说明:
Optional[str]等价于 Python 3.10+ 中的str | None写法,表示该字段既可以是字符串类型,也可以是空值。
- 数据校验机制
Redis OM 的数据校验能力底层完全依赖 Pydantic,会根据模型的类型注解在运行时自动校验数据合法性。
每一个 Redis OM 模型本质上同时也是一个 Pydantic 模型,因此你可以直接复用 Pydantic 生态中的所有校验器(例如 EmailStr、Pattern 等),无需额外开发即可实现复杂的业务校验逻辑。
- 基础类型校验
基础的类型注解(例如 str、int、datetime.date 等)会自动开启对应的数据类型校验,无需额外配置。
示例模型定义:
import datetime
from typing import Optional
from pydantic import EmailStr
from redis_om import HashModel
class Customer(HashModel):
first_name: str
last_name: str
email: EmailStr
join_date: datetime.date
age: int
bio: Optional[str]
Redis OM 会自动保证:
first_name永远是字符串类型age永远是整数类型email永远符合邮箱格式规范- 所有字段的类型都与声明保持一致
- 复杂校验场景
10.1 创建对象时触发校验
当我们尝试传入非法值创建模型对象时,会立即触发 ValidationError 校验异常。
示例代码:
from pydantic import ValidationError
import datetime
try:
Customer(
first_name=<span>"Andrew"</span>,
last_name=<span>"Brookins"</span>,
email=<span>"Not an email address!"</span>, <span># 非法邮箱格式</span>
join_date=datetime.date.today(),
age=38,
bio=<span>"Python developer, works at Redis, Inc."</span>
)
except ValidationError as e:
<span>print</span>(e)
输出结果:
1 validation error <span>for</span> Customer
email
value is not a valid email address: An email address must have an @-sign.
10.2 修改字段后保存时触发校验
如果先创建合法的模型实例,再将字段修改为非法值,调用 save() 方法持久化时同样会触发校验错误。
示例代码:
import datetime
<span># 创建合法对象</span>
andrew = Customer(
first_name=<span>"Andrew"</span>,
last_name=<span>"Brookins"</span>,
email=<span>"andrew.brookins@example.com"</span>,
join_date=datetime.date.today(),
age=38,
bio=<span>"Python developer"</span>
)
<span># 修改为非法邮箱</span>
andrew.email = <span>"Not valid"</span>
try:
andrew.save()
except ValidationError as e:
<span>print</span>(e)
输出结果:
ValidationError: email is not a valid email address
- 字段值约束
除了基础类型校验,Pydantic 还提供了丰富的字段值约束能力,所有这些约束类型都可以直接在 Redis OM 模型中使用,常见的约束场景包括:
- 始终自动转为小写的字符串
- 必须匹配指定正则表达式的字符串
- 取值在指定区间内的整数
- 必须是某个数字倍数的整数
通过组合这些约束,我们可以实现绝大多数业务场景下的字段校验需求,无需额外编写校验逻辑。
本文把 Redis OM 字段能力讲透,适合已在用 Redis OM 或 Pydantic 的开发者,能快速落地可选字段、自动校验与常见约束,减少手写校验逻辑。