2014-08-12 2 views
0

Я пытаюсь получить такую ​​структуру данных, как это, на основе отношения «многие ко многим».создать словарь на основе фильтра в sqlalchemy

Скажем, например, есть стол с Users и стол с Roles. Пользователь может иметь много ролей.

user_roles = db.Table(
    'user_roles', 
    db.Column('user_id', db.Integer, db.ForeignKey(User.id), primary_key=True), 
    db.Column('role_id', db.Integer, db.ForeignKey(Role.id), primary_key=True) 
) 

То, что я пытаюсь получить это структура данных, как это, где Role является ключом, а список, который следует это все пользователи этой роли, как этот

{ 
    'Write_Articles': ['<User Corvid>, <User Crow>'], 
    'Delete_Articles': ['<User Corvid>'], 
    'Change_Tags': ['<User Crow>', '<User Jeff>'], 
    'Kitty_Cat': ['<User Kitty>'] 
} 

Как может ли это быть достигнуто в SQLAlchemy?

+2

Если у вас уже установлено отношение «многие ко многим», это должно быть довольно тривиально, нет? ('{r: r.users for r в Role.query}') Или вы ищете, как настроить отношения «многие ко многим»? – univerio

ответ

1

Eager-load отношение, чтобы избежать нескольких запросов и использовать понимание словаря для управления результатами.

by_name = {g.name: g.users for g in Group.query.options(db.joinedload(Group.users))} 
Смежные вопросы