国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Flask Web Development —— 數(shù)據(jù)庫(kù)(中)

keelii / 2755人閱讀

摘要:關(guān)系關(guān)系數(shù)據(jù)庫(kù)通過使用關(guān)系在不同的表中建立連接。以下部分將介紹最常見的數(shù)據(jù)庫(kù)操作。如果數(shù)據(jù)庫(kù)已存在函數(shù)不會(huì)重新創(chuàng)建或更新數(shù)據(jù)庫(kù)表。到目前為止對(duì)象只存于中,他們還沒有被寫入數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)會(huì)話也叫事務(wù)。刪除行數(shù)據(jù)庫(kù)會(huì)話同樣有方法。

7、關(guān)系

關(guān)系數(shù)據(jù)庫(kù)通過使用關(guān)系在不同的表中建立連接。圖像5-1的關(guān)系圖表達(dá)了用戶和用戶角色之間的簡(jiǎn)單關(guān)系。這個(gè)角色和用戶是一對(duì)多關(guān)系,因?yàn)橐粋€(gè)角色可以從屬于多個(gè)用戶,而一個(gè)用戶只能擁有一個(gè)角色。

示例5-3的模型類展示了圖像5-1中表達(dá)的一對(duì)多關(guān)系。

示例5-3. hello.py:關(guān)系

class Role(db.Model): 
    # ...
    users = db.relationship("User", backref="role")

class User(db.Model): 
    # ...
    role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))

就像圖像5-1中看到的那樣,關(guān)系通過使用外鍵來連接兩行。添加給User模型的role_id列被定義為外鍵,且建立關(guān)系。db.ForeignKey()的參數(shù)roles.id指定的列應(yīng)該理解為在roles表的行中持有id值的列。

添加到Role模型的users屬性表現(xiàn)了關(guān)系的面向?qū)ο蟮挠^點(diǎn)。給定Role類的實(shí)例,users屬性會(huì)返回一組連接到該角色的用戶。指定給db.relationship()的第一個(gè)參數(shù)表明模型中關(guān)系的另一邊。如果類還未定義,這個(gè)模型可以作為字符串提供。

  

注意:之前在segmentdefault中遇到的問題,后來粗略閱讀了SQLAlchemy的源碼。ForeignKey類的column接收三種類型的參數(shù),一種是“模型名.屬性名”;一種是“表名.列名”,最后一種沒看明白,下次試著用一下。

db.relationship()backref參數(shù)通過給User模型增加role屬性來定義反向關(guān)系。這個(gè)屬性可以替代role_id訪問Role模型,是作為對(duì)象而不是外鍵。

大多數(shù)情況下db.relationship()可以定位自己的外鍵關(guān)系,但是有時(shí)候不能確定哪個(gè)列被用作外鍵。例如,如果User模型有兩個(gè)或更多列被定義為Role的外鍵,SQLAlchemy將不知道使用兩個(gè)中的哪一個(gè)。每當(dāng)外鍵配置模棱兩可的時(shí)候,就必須使用額外參數(shù)db.relationship()。表格5-4列出一些常用配置選項(xiàng)用于定義關(guān)系。

表格5-4. 常用SQLAlchemy關(guān)系選項(xiàng)

閱讀需要支付1元查看
<