我需要获取模型属性的列表,这些属性实际上是关系(也就是说,它们是由relationship()
创建的)。
假设我在Foo
中有一个模型models
:
class Thing(db.Model):
id = db.Column(...)
bar_id = db.Column(...)
foo_id = db.Column(...)
foo = db.relationship('Foo')
bar = db.relationship('Bar')
稍后,我想获取models.Thing
并获取关系属性列表,即['foo', 'bar']
。
目前,我正在检查dir(models.Thing)
所指示的sqlalchemy.orm.attributes.InstrumentedAttribute
属性类型property
所指示的每个属性,该属性可以是ColumnProperty
或RelationshipProperty
。这样做了,但我想知道是否还有另一种方式。
我可能只是找到以_id
结尾的所有属性并派生关系名称,但在某些情况下这可能会中断。
如何设置__relationships__ = ['foo', 'bar']
?
或者SQLAlchemy中有什么内容可以帮助我吗?
答案 0 :(得分:23)
确实 - 看看sqlalchemy.inspection.inspect
。在映射的类(例如,您的inspect
类)上调用Thing
将返回Mapper
,其dict
属性为from sqlalchemy.inspection import inspect
thing_relations = inspect(Thing).relationships.items()
,如:< / p>
{{1}}
答案 1 :(得分:9)
您也可以使用
代替inspect
model.__mapper__.relationships
答案 2 :(得分:6)
您只需使用inspect
sqlalchemy
模块即可
from sqlalchemy import inspect
i = inspect(model)
i.relationships
如果您需要每个推荐模型的类,您可以这样做:
referred_classes = [r.mapper.class_ for r in i.relationships]