在SQLAlchemy中获取相关模型

ian*_* P. 4 python sqlalchemy

我在SQLAlchemy中链接了各种模型(有很多,属于等等).有没有办法找到给定的实例相关模型?

就像是:

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

小智 8

我不太确定你想要什么 - 表格列表或映射类列表?

在任何一种情况下,首先要为映射对象构建一个属性列表:

# 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
)
Run Code Online (Sandbox Code Playgroud)

请注意,sa.orm.class_mapper(cls)如果当前没有实体实例的句柄,但只有映射的类,则可以使用该函数.

现在,在第一种需要相关列表的情况下,执行以下操作:

related_tables = [prop.target for prop in relation_properties]
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,您可能需要相关映射类的列表,请执行以下操作:

related_classes = [prop.mapper.class_ for prop in relation_properties]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助你入门.