加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

flask多对多关系的查询、添加、删除

发布时间:2020-12-20 10:31:18 所属栏目:Python 来源:网络整理
导读:#角色模型 class Role(db.Model): __tablename__=‘role‘ r_id=db.Column(db.Integer,autoincrement=True,primary_key=True) r_name=db.Column(db.String(10)) user=db.relationship(‘User‘,backref=‘role‘) ? #角色和权限的(多对多的)关联表 #r_p为关

#角色模型

class Role(db.Model):

__tablename__=‘role‘
r_id=db.Column(db.Integer,autoincrement=True,primary_key=True)
r_name=db.Column(db.String(10))
user=db.relationship(‘User‘,backref=‘role‘)

?

#角色和权限的(多对多的)关联表
#r_p为关联表的表名
r_p=db.Table(‘r_p‘,
db.Column(‘role_id‘,db.Integer,db.ForeignKey(‘role.r_id‘),primary_key=True),
db.Column(‘permission_id‘,db.ForeignKey(‘permission.p_id‘),primary_key=True))

?

#权限模型表
class Permission(db.Model):
__tablename__=‘permission‘
p_id=db.Column(db.Integer,primary_key=True)
p_name=db.Column(db.String(16),unique=True)
p_er=db.Column(db.String(16),unique=True)
#添加多对多的反向引用,必须使用secondary指定中间关联表
#用权限查询角色时用查询到的权限对象:“权限对象.roles.all()”得到其对应的所有角色
roles=db.relationship(‘Role‘,secondary=r_p,backref=db.backref(‘permission‘,lazy=True))
#db.backref(‘permission‘,中的permission用来反向关联,用角色查询其对应的所有权限。用查询到的 ‘角色对象.permission.all()‘得到。
###relationship可以放到任意一个类中都行,与之相反。###

?

#多对多关系查询

#根据角色找权限
####多对多关系中获取对象,只能用get(id)方法,不能通过filter或者filter_by来获取###
role=Role.query.get(id)
per=role.permission.all()
return ‘,‘.join(c.name for c in per)

?

?

#根据权限来找角色
per=Permission.query.get(id)
role=per.roles.all()
return ‘,‘.join(i.name for i in role)


#多对多关系添加
role=Role.query.get(id)
per=Permission.query.get(id)
#给角色添加权限
role.permission.append(per)


#多对多关系删除
role=Role.query.get(id)
per=Permission.query.get(id)
#给角色删除权限
role.permission.remove(per)

总结:ORM操作时,多对多关系的角色权限表(中间关联表),不需要用户维护.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读