Python SQLAlchemy-从双向关联代理访问属性

Python SQLAlchemy-从双向关联代理访问属性,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,在炼金术中,我有三个模型定义如下: class Account(db.Model): __tablename__ = 'accounts' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64))

在炼金术中,我有三个模型定义如下:

class Account(db.Model):                                  
    __tablename__ = 'accounts'                            
    id = db.Column(db.Integer, primary_key=True)          
    name = db.Column(db.String(64))                                      
    users = association_proxy('user_accounts', 'user') 

class User(db.Model):                              
    __tablename__ = 'users'                                   
    id = db.Column(db.Integer, primary_key=True)              
    username = db.Column(db.String(64))                                             
    accounts = association_proxy('user_accounts', 'account')  

class Permission(db.Model):                                            
    __tablename__ = 'permissions'                                      
    account_id = db.Column(db.Integer, db.ForeignKey('accounts.id'), primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'),  primary_key=True)
    role = db.Column(db.Integer)                                                                                                    
    account = db.relationship("Account", backref=backref('user_accounts
    user = db.relationship("User", backref=backref('user_accounts')) 
它们用于表示
帐户
用户
类之间的多对多关系,由
权限
控制

目前,我可以做以下工作:

# create initial records
a = Account()
u = User()
p = Permission()
p.account = a
p.user = u
db.session.add_all([a, u, p])
db.session.commit()
# get the list of accounts associated with a user
u.accounts
[<Account 1>]
# get the list of users associated with an account (same as above, just reverse)
a.users
[<User 1>]
#创建初始记录
a=账户()
u=用户()
p=权限()
p、 帐户=a
p、 用户=u
db.session.add_all([a,u,p])
db.session.commit()
#获取与用户关联的帐户列表
u、 帐目
[]
#获取与帐户关联的用户列表(同上,仅相反)
a、 使用者
[]
但是,我无法获得用户在特定帐户中的确切角色

基本上,我希望能够做到这一点:

a.users[0]。角色

。。。要了解此用户在特定帐户
a
上的角色,请执行以下操作。如果同一行针对不同的帐户运行,称为
a2
,则我希望获得不同的角色(调用它的用户对帐户
a2
而不是
a1
具有的任何角色)


这甚至可以通过关系实现吗?或者,我应该循环查看
权限
,查找用户每次尝试访问帐户时所扮演的角色,因为这是数据库关系的反模式吗?

有几个选项,其中一些在中概述

一是可以直接查询关联对象表

permissions=Permission.query.filter\u by(user\u id==user\u id)。filter\u by(account\u id==account\u id)。one()

或者,如果您已经有权访问a
User
实例,则可以从users对象中找到您要查找的帐户并访问角色

account = next((aco for aco in user.accounts if aco.id == account_id), None)
if account:
    role = account.role