Python SqlAlchemy为具有关联代理的关联表返回错误数据

Python SqlAlchemy为具有关联代理的关联表返回错误数据,python,sqlalchemy,Python,Sqlalchemy,我使用以下模型结构定义了角色/权限模型: 类角色(db.Model): __tablename_uu='角色' id=db.Column(db.Integer,主键=True) name=db.Column(db.String(120),unique=True,nullable=False) 权限=db.relationship(“权限”,secondary=Role2Permission.\uuuu tablename\uuuuu) @类方法 def按id查找(cls,id): 返回cls.q

我使用以下模型结构定义了角色/权限模型:

类角色(db.Model):
__tablename_uu='角色'
id=db.Column(db.Integer,主键=True)
name=db.Column(db.String(120),unique=True,nullable=False)
权限=db.relationship(“权限”,secondary=Role2Permission.\uuuu tablename\uuuuu)
@类方法
def按id查找(cls,id):
返回cls.query.filter_by(id=id).first()
类角色2权限(数据库模型):
__tablename_uuu='role_2_permission'
role\u id=db.Column(db.Integer,db.ForeignKey('roles.id'),primary\u key=True)
permission\u id=db.Column(db.Integer,db.ForeignKey('permissions.id'),primary\u key=True)
布尔值=db.Column(db.Boolean,默认值=False)
类权限(db.Model):
__tablename_uu='权限'
id=db.Column(db.Integer,主键=True)
action=db.Column(db.String(255))
role2permission=db.relationship('role2permission',lazy='joined')
bool\u值=关联\u代理('role2permission','bool\u值')
获取角色时,我希望通过关联表中的关联代理设置权限值(
bool\u value
)。但是,使用
cls.query.filter_by(id=id).first()
(其中
cls
角色
)为查询的角色返回错误的
bool_值。我认为在查看生成的SQL时可以看出原因:

选择permissions.id作为permissions\u id,
permissions.action作为permissions\u action,
role_2_permission_1.role_id作为role_2_permission_1_role_id,
role_2_permission_1.permission_id作为role_2_permission_1_permission_id,
角色\u 2\u权限\u 1.bool\u值作为角色\u 2\u权限\u 1\u bool\u值
从角色_2_权限,
权限
左外部联接角色\u 2\u权限作为权限上的角色\u 2\u权限\u 1.id=角色\u 2\u权限\u 1.permission\u id
其中1=角色\u 2\u权限。角色\u id和权限。id=角色\u 2\u权限。权限\u id
我认为这会获取太多的行,因为它是从权限表中选择的,而不是仅仅将其连接到
role\u 2\u permission
表中,但出于某种原因再次连接
role\u 2\u permission
。flask/sqlalchemy以一种不好的方式减少了返回的行:事实并非如此,它返回的是属于角色1的
bool\u值
s,而不是属于角色2的
bool\u值
s


在查询角色时,我必须如何修复模型才能获得正确的权限数据?

在编写
cls.query.filter\u by(id=id).first()时,您能否澄清查询的确切内容。
cls
a
权限
?你确定这就是所有的查询吗?因为它似乎没有被正确编译,而且在这个查询中似乎还有其他内容。我更新了这个问题,并将查询包含在代码段中
cls
是一个
角色
。我看不到任何其他可以查询数据的部分。