Python SQLAlchemy:从db.Model获取关系

Python SQLAlchemy:从db.Model获取关系,python,sqlalchemy,Python,Sqlalchemy,我需要得到一个模型属性的列表,这些属性实际上是关系(也就是说,它们是由relationship()创建的) 假设我在一个模型中有一个模型Foo: class Thing(db.Model): id = db.Column(...) bar_id = db.Column(...) foo_id = db.Column(...) foo = db.relationship('Foo') bar = db.relationship('Bar') 稍后,我想获取

我需要得到一个模型属性的列表,这些属性实际上是关系(也就是说,它们是由
relationship()
创建的)

假设我在一个
模型中有一个模型
Foo

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
,以确定其
属性的类,该属性可以是
ColumnProperty
RelationshipProperty
。这就行了,但我想知道还有没有别的办法

我可能只找到以
\u id
结尾的所有属性,然后派生关系名称,但在某些情况下,这可能会中断

设置一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu关系['foo','bar']
怎么样


或者SQLAlchemy中有什么东西可以帮助我吗?

确实有——请看一看。在映射类(例如,您的
Thing
类)上调用
inspect
,将返回a,其属性为
dict
,类似于:

from sqlalchemy.inspection import inspect

thing_relations = inspect(Thing).relationships.items()

除了使用
inspect
之外,您还可以使用


model.\uu映射器关系

您只需使用
sqlalchemy

from sqlalchemy import inspect

i = inspect(model)
i.relationships
如果需要每个参考模型的类,可以执行以下操作:

referred_classes = [r.mapper.class_ for r in i.relationships]

有没有一种简单的方法可以同时查看“Foo”和“Bar”呢?不确定你的意思-是否值得提出一个新问题并链接到这个问题的上下文。编辑为添加
.items()
,因为我发现自己有一个sqlalchemy.util.\u collections.ImmutableProperties,而且它不是很有帮助(随着类的发展,我的意思是,它不会打印)。他想要一份清单。