2015-10-20 45 views
0

我給出了一個SQLAlchemy模型instance的實例和該實例上的關係relation的名稱。我可以通過做getattr(instance, relation)來訪問所有相關的實例。我如何構建一個包含該關係的所有實例的查詢,或換言之,計算結果爲getattr(instance, relation)的查詢?我沒有給出有關數據庫表的其他信息等。如何創建僅包含與模型的特定實例相關的實例的SQLAlchemy查詢?

這與Construct a query to filter many-to-many for all B instances related to a given A instance類似,但我沒有表定義。

回答

0

我的解決方案如下。假設instance是模型的實例,relation是表示該模型的關係屬性的字符串,'id'是相關模型的主鍵,而related_model是相關模型。此解決方案僅將那些主鍵位於已知主鍵的列表中的實例從給定實例的一對多關係屬性中過濾相關模型:

relationship = getattr(instance, relation) 
primary_keys = {getattr(inst, 'id') for inst in relationship} 
query = session.query(related_model) 
query.filter(getattr(related_model, 'id') in primary_keys) 
相關問題