Я пытался создать собственный ПК на основе полей модели. https://redis.io/learn/develop/python/redis-om
«Функция генерации идентификаторов по умолчанию создает ULID, хотя вы можете изменить функцию, которая генерирует первичный ключ для моделей, если вы хотите использовать другой тип первичного ключа».
Я хотел бы настроить генерацию первичных ключей на основе некоторых полей модели (экземпляра).
Я заметил, что если я создаю поле с именем «pk», redis-om принимает это значение в качестве первичного ключа.
Но есть ли способ? Я могу просто декларативно назначить поля в качестве первичных ключей?
Вы можете добавить Field(primary_key=True)
к любому атрибуту вашей модели.
Вот код, представленный в их примере с ПК по умолчанию:
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
Нет, это работает с JsonModel, хотя
Это не работает с Redis JSON. Вот в чем был вопрос.
Вы пробовали запустить свой код, и он у вас работает?