如何从另一个模块添加到现有映射类的关系

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

我有两个模块。第一个是:

# module_1.py
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase):
    pass

class User(Base):
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]

第二个是:

# module_2.py
from sqlalchemy.orm import Mapped, mapped_column

from .module_1 import Base, User

class Address(Base):
    id: Mapped[int] = mapped_column(primary_key=True)
    city: Mapped[str]
    user_id: Mapped[int] = mapped_column(
        ForeignKey('user.id'), nullable=False
    )

    user: Mapped['User'] = relationship(back_populates='addresses')

现在的问题是我不知道如何添加

addresses: Mapped[Set['Address']] = relationship(back_populates='user')

User

 内部
module_2.py
类,无需修改
module_1.py
文件。顺便说一句,我不想使用旧的
backref
关系参数。

python python-3.x sqlalchemy
1个回答
0
投票

您可以尝试在 User 类定义后添加

addresses
关系:

from sqlalchemy.orm import relationship
from sqlalchemy.orm.base import class_mapper
from sqlalchemy.orm.relationships import RelationshipProperty

from .module_1 import User

mapper = class_mapper(User)
mapper.add_property(
    'addresses',
    relationship(
        Address,
        back_populates='user',
        uselist=True
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.