我正在尝试使用通用查询来选择父类及其所有子类。
查询如下所示:
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"
}
我必须更新查询函数而不是使其成为通用函数:
def get_user(session: Session, data_filter):
return session.query(User).options(joinedload(User.domainName)).filter_by(**data_filter).first()