合并 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>)
当您对这些对象之一(BaseModel
或 JoinModel
)执行 .__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)
当你做类似的事情时,
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>)
当您对这些对象之一(BaseModel
或 JoinModel
)执行 .__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)