mal*_*ree 14 python sqlalchemy
我需要获得模型属性的列表,这些属性实际上是关系(也就是说,它们是由它们创建的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')
Run Code Online (Sandbox Code Playgroud)
稍后,我想models.Thing获取一个关系属性列表,即['foo', 'bar'].
目前我正在检查其所指示的每个属性dir(models.Thing)恰好是sqlalchemy.orm.attributes.InstrumentedAttribute其property属性类的类型- 可以是a ColumnProperty或RelationshipProperty.这样做的工作,但我想知道是否有另一种方式.
我可能只是找到所有属性结束_id并导出关系名称,但在某些情况下这可能会中断.
设置一个__relationships__ = ['foo', 'bar']怎么样?
或者SQLAlchemy中有什么内容可以帮助我吗?
Sea*_*ira 23
的确有 - 看一看sqlalchemy.inspection.inspect.调用inspect映射类(例如,您的Thing类)将返回一个Mapper具有以下relationships属性的属性:
from sqlalchemy.inspection import inspect
thing_relations = inspect(Thing).relationships.items()
Run Code Online (Sandbox Code Playgroud)
您只需要使用该inspect模块sqlalchemy
from sqlalchemy import inspect
i = inspect(model)
i.relationships
Run Code Online (Sandbox Code Playgroud)
如果您需要每个推荐模型的类,您可以:
referred_classes = [r.mapper.class_ for r in i.relationships]
Run Code Online (Sandbox Code Playgroud)