0
我有一段工作代碼,但效率非常低,而不是帶有連接的單個查詢。我得到一個初始查詢,然後在響應中每行有一個查詢。在SQLAlchemy中優化hybrid_properties
我有以下情形:
class Job(Base, SerializeMixin, JobInterface):
__tablename__ = 'job_subjobs'
id = Column(Integer, primary_key=True, autoincrement=True)
group_id = Column(Integer, ForeignKey("job_groups.id"), nullable=False)
class Crash(Base, SerializeMixin):
__tablename__ = 'crashes'
id = Column(Integer, primary_key=True, autoincrement=True)
job_id = Column(Integer, ForeignKey("job_subjobs.id", ondelete='CASCADE'), nullable=False)
job = relationship('Job', backref='Crash')
@hybrid_property
def job_identifier(self):
return "{}:{}".format(self.job.group_id, self.job.id)
因此,考慮上述,我執行了所有崩潰的查詢時,它會執行一個SELECT所有崩潰。當我迭代並要求job_identifier它會爲每次崩潰做一個單獨的SELECT。
self.session.query(Crash).all()
有什麼方法我可以創建一個@hybrid_property引用不同的表,並將它從一開始就JOIN和預裝的表達?
我用@ xxx.expression進行了試驗,結果沒有成功。如果一切都失敗了,我可以在Crash表中添加另一個外鍵,但是如果可能的話,我想避免改變當前的數據結構。
可以這樣用orm.column_property完成的()?加入兩列與新的column_property形成不同的表格? – graN
這是通過[渴望加載]完成的(http://docs.sqlalchemy.org/en/latest/orm/loading_relationships.html#using-loader-strategies-lazy-loading-eager-loading)。 – univerio