redis-om python 自定义主键

问题描述 投票:0回答:1

我一直在尝试根据模型中的字段创建自定义 PK。 https://redis.io/learn/develop/python/redis-om

“默认 ID 生成函数会创建 ULID,但如果您想使用不同类型的主键,则可以更改为模型生成主键的函数。”

我想根据模型(实例)的一些字段自定义主键的生成。

我注意到,如果我创建一个名为“pk”的字段,redis-om 确实会将此值作为主键。

但是有办法吗。我可以直接将字段指定为主键吗?

python redis-om
1个回答
0
投票

您可以将

Field(primary_key=True)
添加到模型中的任何属性。

这是示例中提供的带有默认 pk 的代码:

import datetime
from typing import Optional

from redis_om import HashModel


class Customer(HashModel):
    first_name: str
    last_name: str
    email: str
    join_date: datetime.date
    age: int
    bio: Optional[str] = "Super dope"


andrew = Customer(
    first_name="Andrew",
    last_name="Brookins",
    email="[email protected]",
    join_date=datetime.date.today(),
    age=38)

print(andrew.pk)
# > '01FJM6PH661HCNNRC884H6K30C'

andrew.save()
assert Customer.get(andrew.custom_pk) == andrew

要分配您自己的主键,您可以按如下方式更新代码:

import datetime
from typing import Optional

from redis_om import HashModel, Field


class Customer(HashModel):
    custom_pk:str = Field(primary_key=True)
    first_name: str
    last_name: str
    email: str
    join_date: datetime.date
    age: int
    bio: Optional[str] = "Super dope"


andrew = Customer(
    custom_pk = "customPkValue",
    first_name="Andrew",
    last_name="Brookins",
    email="[email protected]",
    join_date=datetime.date.today(),
    age=38)
    
andrew.save()

assert Customer.get(andrew.custom_pk) == andrew
© www.soinside.com 2019 - 2024. All rights reserved.