flask 資料模型的外來鍵關係

2021-08-21 16:54:23 字數 1971 閱讀 1760

sql資料庫中,兩個表之間的關係表現為外來鍵.在sqlalchemy的模型中,也可以表現這種模型之間的關聯關係.

class role(db.model):

__tablename__='roles'

id = db.column(db.integer,primary_key=true)

name = db.column(db.string(64),unique=true)

users = db.relationship('user',backref='role')

def __repr__(self):

return ''%self.name

class user(db.model):

__tablename__='users'

id=db.column(db.integer,primary_key=true)

name=db.column(db.string(64),unique=true)

role_id = db.column(db.integer,db.foreignkey('roles.id'))

def __repr__(self):

return ''%self.name

我們先分析user模型中的下面這段**:

role_id = db.column(db.integer,db.foreignkey('roles.id'))
很容易理解,這是在user表中建立了乙個名叫role_id的字段,並把它設定成外來鍵,然後把外來鍵關聯成roles表中的id欄位.需要注意的時這裡用的roles.id,roles是我們在role模型中定義的__tablename__. 這是sql資料庫中一般設定外來鍵的方法.

接下來,看role模型中的這段**:

users = db.relationship('user',backref='role')
在標準的sql資料中,我們設定外來鍵時往往只需要在要設定外來鍵的表中新增外來鍵,而不需要在被關聯表中進行任何操作.但是在sqlalchemy建模中,我們看到還需要在被關聯的模型role中新增關係.這其實是物件導向的思想,這裡的的新建了乙個名叫users的屬性用來表示當前角色中包含的使用者列表.users被定義成乙個db.relationship物件,該物件的建構函式由兩部分組成:

第一部分 —— 'user'表示關係的另一端模型的名稱.

第二部分 —— 是乙個名叫backref的引數,叫做反向關係,我們將其設定成'role',它會像user模型中新增乙個名叫做role的屬性,這個屬性可以替代role_id訪問role模型,但是它獲取的是role模型的物件,而非role模型對應的id的值。

下面我們重點驗證並解釋第二部分講的內容:

>>>from test.py import role,user

>>>r=role(id=1,name='admin')

>>>u=user(id=10,name='hyman',role_id=1)

>>>print u.role

第一行是引入我們定義的role和user模型;第二行和第三行分別定義了乙個role和user例項;最重要的是第四行,我們將u新增到r的users(users實際上是乙個list)列表中,這樣我們同時也在u中新增了乙個名叫做role的屬性,而這屬性就是我們定義的r物件.這就是所謂的可以用role代替role_id訪問role模型,但是它獲取的是role模型物件而非器對應的id的值...

關係型資料模型

關係模型是由若干個關係模式組成的集合,關係模式的例項稱為關係,每個關係實際上是一張二維 關係模型用鍵導航資料,其 簡單,使用者只需用簡單的查詢語句就可以對資料庫進行操作,並不涉及儲存結構 訪問技術等細節。sql語言是關聯式資料庫的代表性語言,已經得到了廣泛的應用。典型的關聯式資料庫產品有db2 or...

關係資料模型

一 資料結構 關係資料模型是有若干個關係模式組成的集合。關係模式的例項成為關係。每個關係可看為乙個二維表,表的行稱為元組,用來標識實體集中的乙個實體 表的列稱為屬性,列名即為屬性名,屬性名不能相同。關係的描述稱為關係模式 relation schema 它可以形式化地表示為 r u,d,dom,f ...

資料模型之間的關係

models之間的關係簡單的分為一對一 onetoonefield 一對多 foreignkey 多對多 manytomanyfield 三種 構建這種關係相對簡單,只需要在models中宣告即可,主要是在呼叫和查詢的時候有些困難,所以這裡主要說說查詢相關 查詢和引用一般是在檢視函式views中實現...