在SQLAlchemy中获取相关模型

4 投票
1 回答
1796 浏览
提问于 2025-04-16 18:52

我在使用SQLAlchemy的时候,有很多模型是相互关联的,比如“一个有很多”、“属于”等关系。有没有办法根据一个实例找到相关的模型呢?

类似于下面这样的:

usersModelInstance.getRelatedTables() // This should provide an array or something with the related tables of users (orders, logins, posts, etc.).

1 个回答

9

我不太确定你想要什么——是想要一个表的列表,还是想要一个映射类的列表呢?

无论哪种情况,首先你需要为你的映射对象建立一个属性列表:

# Import sqlalchemy so we can use it
import sqlalchemy as sa

# Rename the OP's object to `obj`
obj = usersModelInstance

# Build a list of only relationship properties
relation_properties = filter(
    lambda p: isinstance(p, sa.orm.properties.RelationshipProperty),
    sa.orm.object_mapper(obj).iterate_properties
)

注意,如果你现在没有一个实体实例,而只有一个映射类,你可以使用sa.orm.class_mapper(cls)这个函数。

现在,如果你想要的是相关的列表,可以这样做:

related_tables = [prop.target for prop in relation_properties]

如果你想要的是相关的映射类的列表,可以这样做:

related_classes = [prop.mapper.class_ for prop in relation_properties]

希望这些内容能帮助你入门。

撰写回答