在查询中查找表对象

时间:2011-09-03 00:32:53

标签: sqlalchemy

使用sqlalchemy 0.7.2

有没有办法从查询对象中查找表类?例如:

q = session.query(Customers)

如何在Customers中找到q?可能?不可能?

1 个答案:

答案 0 :(得分:11)

是。您需要column_descriptions

然而,这是一条漫长的道路。 sqlalchemy.orm.Query.column_descriptions会返回 list dict s ,描述每个查询实体给予query。在您的示例中,只有一个实体,因此您需要该列表中的第一个项目。既然你对查询实体的类型感兴趣,而不是它的结构,你需要该列表中的"type"键:

q_entity = q.column_descriptions[0]['type']
assert q_entity == Customer

访问映射类的表需要在映射器子系统中窥探。为此,您应该使用manager_of_class。该表可通过mapper.mapped_table属性从管理员访问:

from sqlalchemy.orm.attribute import manager_of_class
q_table = manager_of_class(q_entity).mapper.mapped_table

拒绝跳过海峡到mapperCustomer.__mapper__,甚至Customer.__table__的冲动;这是sqlalchemy.ext.declarative特有的,不适用于通过其他方式映射的类。