Получить связанные модели в SQLAlchemy - PullRequest
4 голосов
/ 03 июня 2011

У меня есть различные модели, связанные в SQLAlchemy (имеет много, принадлежит и т. Д.). Есть ли способ найти родственные модели по заданному экземпляру?

Что-то вроде:

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

1 Ответ

8 голосов
/ 09 июня 2011

Я не совсем уверен, что вы хотите - список таблиц или список сопоставленных классов?

В любом случае сначала создайте список свойств для вашего сопоставленного объекта :

# 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), если не в настоящее время имеет дескриптор объекта instance , но только сопоставленный класс.

Теперь, в первом случае, когда вам нужен список связанных таблиц , выполните:

related_tables = [prop.target for prop in relation_properties]

Во втором случае, когда вам может потребоваться список связанных отображаемых классов, делать:

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

Надеюсь, это поможет вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...