flask多對多的正向 反向引用

2021-09-25 16:59:02 字數 2022 閱讀 4138

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,呼叫它可以獲取某個學生的多個...