如何创建仅包含与模型的特定实例相关的实例的SQLAlchemy查询?

时间:2015-10-20 18:46:51

标签: python sqlalchemy introspection

我获得了一个SQLAlchemy模型instance的实例以及该实例上的关系relation的名称。我可以通过getattr(instance, relation)访问所有相关实例。如何构建包含该关系的所有实例的查询,或者换句话说,是一个评估为getattr(instance, relation)的查询?我没有得到关于数据库表等的其他信息。

这与问题Construct a query to filter many-to-many for all B instances related to a given A instance类似,但我没有表定义。

1 个答案:

答案 0 :(得分:0)

我的解决方案如下。假设instance是模型的实例,relation是表示该模型的关系属性的字符串,'id'是相关模型的主键,related_model是相关模型。此解决方案仅过滤那些主键位于给定实例的to-many关系属性的已知主键列表中的实例:

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)