Пользовательский первичный ключ Redis-om Python

Я пытался создать собственный ПК на основе полей модели. https://redis.io/learn/develop/python/redis-om

«Функция генерации идентификаторов по умолчанию создает ULID, хотя вы можете изменить функцию, которая генерирует первичный ключ для моделей, если вы хотите использовать другой тип первичного ключа».

Я хотел бы настроить генерацию первичных ключей на основе некоторых полей модели (экземпляра).

Я заметил, что если я создаю поле с именем «pk», redis-om принимает это значение в качестве первичного ключа.

Но есть ли способ? Я могу просто декларативно назначить поля в качестве первичных ключей?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить 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

Вы пробовали запустить свой код, и он у вас работает?

AmitGK 08.07.2024 00:27

Нет, это работает с JsonModel, хотя

Jacob Frank 08.07.2024 15:40

Это не работает с Redis JSON. Вот в чем был вопрос.

AmitGK 09.07.2024 00:54

Другие вопросы по теме