在sqlalchemy中基于过滤器创建字典

时间:2014-08-12 01:24:22

标签: python python-3.x flask sqlalchemy flask-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中实现这一目标?

1 个答案:

答案 0 :(得分:1)

急切加载关系以避免多次查询,并使用字典理解来操纵结果。

by_name = {g.name: g.users for g in Group.query.options(db.joinedload(Group.users))}