flask多對多關係的查詢、新增、刪除
#角色模型
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.integer,db.foreignkey(
'permission.p_id'
),primary_key=
true))
#許可權模型表
class
permission
(db.model)
:__tablename__=
'permission'
p_id=db.column(db.integer,autoincrement=
true
,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=role.query.get(id)
per=permission.query.get(id)
#給角色刪除許可權
role.permission.remove(per)
總結:orm操作時,多對多關係的角色許可權表(中間關聯表),不需要使用者維護. Flask 資料庫多對多自引用關係
上篇介紹的多對多關係是兩個模型是之間的多對多關係,關聯表聯接的是兩個明確的實體,還有些情況下只有乙個模型,與自己之間存在多對多關係。比如使用者之間的關注。表示使用者關注其他使用者時,只有使用者乙個實體,沒有 第二個實體。如果關係中的兩側都在同乙個表中,這種關係稱為自引用關係。在關注中,關係的左側是使...
Flask 多對多關係
1.專案結構 對錶的基本操作可見鏈結 3.多對多關係 以下通過文章,作者,文章 標記 三個表示例操作 from flask import flask from flask sqlalchemy import sqlalchemy import config create table article ...
flask 定義資料庫關係(多對多)
多對多 我們使用學生和老師來演示多對多關係 每個學生有多個老師,每個老師有多個學生。多對多關係示意圖如下 在例項程式中,student類表示學生,teacher類表示老師。在這兩個模型之間建立多對多關係後,我們需要在student類中新增乙個集合關係屬性teachers,呼叫它可以獲取某個學生的多個...