在查询中查找表对象

Mic*_*ale 5 sqlalchemy

使用sqlalchemy 0.7.2

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

q = session.query(Customers)
Run Code Online (Sandbox Code Playgroud)

我怎么能找到Customersq?可能?不可能?

Sin*_*ion 11

是.你需要column_descriptions.

不过,这是一条漫长的道路. sqlalchemy.orm.Query.column_descriptions返回listdict小号,描述每个查询实体它被给了query.在您的示例中,只有一个实体,因此您需要该列表中的第一个项目.既然你对查询实体的类型感兴趣,而不是它的结构,那么你需要"type"来自该列表的密钥:

q_entity = q.column_descriptions[0]['type']
assert q_entity == Customer
Run Code Online (Sandbox Code Playgroud)

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

from sqlalchemy.orm.attribute import manager_of_class
q_table = manager_of_class(q_entity).mapper.mapped_table
Run Code Online (Sandbox Code Playgroud)

抵制的呼吁跳过海峡的mapper通过Customer.__mapper__,甚至Customer.__table__; 这是特定的sqlalchemy.ext.declarative,并且不适用于通过其他方式映射的类.