合并 SQLAlchemy JOIN 的结果

Combining the Results of SQLAlchemy JOINs

当你做类似的事情时,

session.query(BaseModel, JoinModel).join(JoinModel, BaseModel.id == JoinModel.id), isouter=True)

结果类似于下面,

(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A15BE50>)
(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A15BC70>)
(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A317670>)

当您对这些对象之一(BaseModelJoinModel)执行 .__dict__ 时,您可以获得属性的值。

有没有一种有效的方法可以将这两个对象的属性组合成一个结果?我的意思是最后,理想情况下它应该只是一组值,对吧?

您可以在模型中定义 relationships and backrefs。这将帮助您在不使用连接的情况下访问属性。这是一个可能对您有所帮助的示例代码

from sqlalchemy.orm import backref, relationship

    class BaseModel():
        id = Column(Integer, primary_key=True, autoincrement=True)
        join_model = relationship(
        "JoinModel",
        backref=backref("base_model", cascade="all, delete-orphan", lazy=True))


    class JoinModel():
        id = Column(Integer, primary_key=True, autoincrement=True)
        base_id = Column(Integer, ForeignKey("base.id",ondelete="CASCADE"), nullable=True)
        name = Column(String)

你可以这样做

base_model = BaseModel.query.all()

print(base_model.join_model.name)