使用sqlalchemy 0.7.2
有没有办法从查询对象中查找表类?例如:
q = session.query(Customers)
如何在Customers
中找到q
?可能?不可能?
答案 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
拒绝跳过海峡到mapper
到Customer.__mapper__
,甚至Customer.__table__
的冲动;这是sqlalchemy.ext.declarative
特有的,不适用于通过其他方式映射的类。