如何获取SQLAlchemy查询中实体的类型
我知道怎么获取从一个选择语句中返回的列,但我想知道如何从一个sqlalchemy.orm.Query对象中获取将要返回的实体。
>>> sess = Session()
>>> q = sess.query(Entity1, Entity2)
>>> q.statement.c.keys()
['e1_col1', 'e1_col2', ..., 'e2_col1', 'e2_col2, ...]
我想要的是[Entity1, Entity2]
或者类似的东西!
3 个回答
-1
sqlalchemy_utils模块里有一个叫做get_query_entities的函数,可以完成这个任务。
1
这可以通过 Query.column_descriptions 间接获取:
entities = {item['entity'] for item in query.column_descriptions}
这里使用了集合而不是列表,目的是为了避免在查询特定列时出现重复的情况(比如:query = session.query(Foo.bar, Foo.baz)
)。column_descriptions
属性会为每个选中的列提供一个条目,因此如果用列表就会导致重复。
3
更新:现在有了更好的方法,可以查看 @exhuma 的回答。以下是我2010年的旧回答。
你可以试试这个:
[e.mapper.class_ for e in q._entities]
虽然我更希望不直接使用 _entities 属性,而是找到其他方式来访问它,但据我所知,似乎没有其他方法。