Императивная карта как объекта, так и значения объекта внутри этого объекта на одну таблицуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Императивная карта как объекта, так и значения объекта внутри этого объекта на одну таблицу

Сообщение Anonymous »

Допустим, у меня есть сущность, которая сопоставлена ​​с таблицей PostgreSQL в SQLALCHEMY.

Код: Выделить всё

@dataclass
class User:
id: int
email: str
password: str
country: str
city: str
is_admin: bool = False

def __eq__(self, other) -> bool:
return self.id == other.id

user_table = sa.Table(
'user',
mapper_registry.metadata,
sa.Column('id', UUID(as_uuid=True), primary_key=True, server_default=sa.text('gen_random_uuid()'), nullable=False),
sa.Column('email', sa.String(100), nullable=False, unique=True),
sa.Column('password', sa.String(128), nullable=False),
sa.Column('country', sa.String(50)),
sa.Column('city', sa.String(50)),
sa.Column('is_admin', sa.Boolean(), server_default=sa.text('false'), nullable=False),
)

user_mapper = mapper_registry.map_imperatively(user_model.User, user_table)

< /code>
Это не сложно. Теперь я хочу переместить информацию о адресах в отдельный объект значения внутри объекта пользователя, но все же сопоставьте ее на одну таблицу на стороне PostgreSQL.@dataclass(frozen=True)
class UserAddress:
country: str | None = None
city: str | None = None

@dataclass
class User:
id: int
email: str
password: str
address: UserAddress = UserAddress()
is_admin: bool = False

def __eq__(self, other) -> bool:
return self.id == other.id

user_table = sa.Table(
'user',
mapper_registry.metadata,
sa.Column('id', UUID(as_uuid=True), primary_key=True, server_default=sa.text('gen_random_uuid()'), nullable=False),
sa.Column('email', sa.String(100), nullable=False, unique=True),
sa.Column('password', sa.String(128), nullable=False),
sa.Column('country', sa.String(50)),
sa.Column('city', sa.String(50)),
sa.Column('is_admin', sa.Boolean(), server_default=sa.text('false'), nullable=False),
)

user_mapper = ???

< /code>
Как лучше всего это сделать?user_mapper = mapper_registry.map_imperatively(user_model.User, user_table, properties={
'info': composite(user_model.UserInfo, user_table.c.name, user_table.c.last_name, user_table.c.birthdate, user_table.c.phone)
})
Но это требует пользователя userinfo , чтобы иметь метод __composite_values ​​__ , которого я хочу избежать. Я не хочу, чтобы userInfo класс знал что-нибудь о DB-специфическом материале и реализовал какие-либо методы для него.
Есть ли другой способ?

Подробнее здесь: https://stackoverflow.com/questions/717 ... -one-table
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»