我获得了一个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类似,但我没有表定义。
答案 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)