使用SQLAlchemy返回父子JSON序列化对象 - 惰性加载问题

0 投票
1 回答
18 浏览
提问于 2025-04-13 20:27

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

这个查询看起来是这样的:

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交互也被填充了)。但是当返回到Postman时,我只得到了用户字段(没有DomainName):

{
"email": "r@tester.com",
"username": "r",
"password": "",
"firstname": "r",
"lastname": "o"
}

1 个回答

0

我需要更新查询功能,而不是把它做成一个通用的函数:

def get_user(session: Session, data_filter):
    return session.query(User).options(joinedload(User.domainName)).filter_by(**data_filter).first()

撰写回答