使用 SQLAlchemy 返回父子 json 序列化对象 - 延迟加载问题

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

我正在尝试使用通用查询来选择父类及其所有子类。

查询如下所示:

def get_data(session: Session, table, data_filter):
try:
    data = session.query(table).filter_by(**data_filter).first()
    return data
except SQLAlchemyError as e:
    raise e

我不确定问题是否是延迟加载,但每当我运行服务器时,我只获取有关父类的数据。 这是我正在使用的模型的示例:

class User(Base):
    __tablename__ = "user_account"

    email: Mapped[str] = mapped_column(String(60), primary_key=True)
    username: Mapped[str] = mapped_column(String(30))
    password: Mapped[str] = mapped_column(BYTEA(60))
    firstname: Mapped[str] = mapped_column(String(30))
    lastname: Mapped[str] = mapped_column(String(30))

    domainName = relationship("DomainName", cascade="all, delete-orphan", 
    backref="user_account", lazy=False)


class DomainName(Base):
    __tablename__ = "user_domain"
    domain_id: Mapped[int] = mapped_column(primary_key=True)
    user_id: Mapped[int] = mapped_column(ForeignKey("user_account.email"))
    domain_name: Mapped[str] = mapped_column(String(30))

我的服务仅返回 get_data 调用。 如果我使用调试器,我可以看到所有数据(在用户对象中,“domainName”子对象被填充,甚至无需与 IDE 交互)。但是当返回邮递员时,我只有用户字段(减去域名):

{
"email": "[email protected]",
"username": "r",
"password": "",
"firstname": "r",
"lastname": "o"
}
python sqlalchemy fastapi
1个回答
0
投票

我必须更新查询函数而不是使其成为通用函数:

def get_user(session: Session, data_filter):
    return session.query(User).options(joinedload(User.domainName)).filter_by(**data_filter).first()
© www.soinside.com 2019 - 2024. All rights reserved.