一對一的關(guān)系
比如 用戶 和 身份證的區(qū)別就是 一對一的關(guān)系? 一個用戶只可以有一個身份證
class User(db.Model):
? ? __tablename__= 'user'
? ? id= db.Column(db.Integer,primary_key=True)
? ? name= db.Column(db.String(200))
? ? card= db.relationship('Card',uselist=False工腋,backref=‘user’)
class Card(db.Model):
? ? __tablename__= 'card'
? ? id= db.Column(db.Integer,primary_key=True)
? ? cardnum= db.Column(db.String(200))
? ? user_id= db.Column(db.Integer,db.ForeignKey('user.id'))
和 一對多的區(qū)別就是?? uselist=False (false是設(shè)置一對一擅腰,true 是設(shè)置一對多的關(guān)系)其次還可以設(shè)置 反向關(guān)系 在 relationship 設(shè)置 backref 對象的本身(個人理解反向關(guān)系就是 當你用 user 的時候可以訪問 card 里面的內(nèi)容趁冈,反之拜马,當你引用card的時候可以方向引用user對象里面的內(nèi)容)
一對一的話 增刪改查和之前的一樣 沒有什么區(qū)別
----
一對多
一對多就比如 學(xué)生和班級 (一個學(xué)生只有一個班級,一個班級可以有很多個學(xué)生)一膨,一對多需要在ralationship 中設(shè)置 setlist 為 true 豹绪,其中也可以引用反向關(guān)系 讓數(shù)據(jù)使用起來更加的方便
其中一對多的 增刪改查 和之前的沒有什么區(qū)別申眼,基本一樣
其次要注意的是 外鍵一般都設(shè)置在 多的一方括尸,比如學(xué)生和班級的話? 就設(shè)置外鍵就設(shè)置在班級類當中
class Class(db.Model):
? ? __tablename__= 'class'
? ? id= db.Column(db.Integer,primary_key=True)
? ? classname= db.Column(db.String(200))
? ? user_id= db.Column(db.Integer,db.ForeignKey('user.id'))
class User(db.Model):
? ? __tablename__= 'user'
? ? id= db.Column(db.Integer,primary_key=True)
? ? name= db.Column(db.String(200))
? ? classs= db.relationship('Class',backref='user')
反向引用
-----
多對多
(一般需要第三張表去鏈接兩張表病毡,然后將其看成兩個一對多的關(guān)系表)一般多對多使用起來的話會比較的麻煩,比如學(xué)生和課程(一個學(xué)生可以有好多的課程有送,一個課程可以被很多的學(xué)生去選擇)
(1)簡單的多對多就是設(shè)置一個關(guān)聯(lián)表(關(guān)聯(lián)表不是模型僧家,只是一個簡單的表,利用 db阵赠。Table)
(2)還有一個的話就是自引用的關(guān)系肌稻,自己和自己聯(lián)系起來,這也是多對多的關(guān)系(就比如關(guān)注著和被關(guān)注著就是一個很好的自引用的列子枷邪,都是有相同的信息)
(3)還有一個就是高級的多對多的關(guān)系,就比如當有需求就行排序的時候齿风,我們需要的第三張表的話就是一個模型表绑洛,而不是一張簡單的關(guān)聯(lián)表了
(4)多對多的 增加和 刪除的話會有一點點的區(qū)別真屯,其余的 修改和查詢都和之前的差不多
---
多對多增加數(shù)據(jù)(增加數(shù)據(jù)的時候必須兩個內(nèi)容都要有,不然會出錯绑蔫,除非自己設(shè)置默認可以為空)