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,而且它不是很有帮助(随着类的发展,我的意思是,它不会打印)。他想要一份清单。