【问题标题】:create dictionary based on filter in sqlalchemy基于 sqlalchemy 中的过滤器创建字典
【发布时间】:2023-03-21 13:40:01
【问题描述】:

我正在尝试基于多对多关系获得这样的数据结构。

例如,有一个带有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 中实现这一点?

【问题讨论】:

  • 如果您已经建立了多对多关系,这应该是相当简单的,不是吗? ({r: r.users for r in Role.query}) 或者您正在寻找如何建立多对多关系?

标签: python python-3.x flask sqlalchemy flask-sqlalchemy


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多