Django day06 關係對映

2021-08-26 15:18:54 字數 2831 閱讀 1462

目錄

1.關係對映

1.一對一對映

2.一對多對映

3.多對多對映

練習**

1.什麼是一對一

a表中的一條記錄只能與b表中的一條記錄相關聯

b表中的一條記錄也只能與a表中的一條記錄相關聯

典型代表:一夫一妻制

在資料庫中的實現:

a表:設定 主鍵

b表:增加一列,引用自a表的主鍵(外來鍵),並且增加唯一約束

2.語法

在關聯的兩個類的任何乙個類中,增加對另外乙個類的引用

屬性 = models.onetoonefield(entry)

ex:class wife(models.model):

name = models.charfiled(...)

age = models.integerfield(...)

author = models.onetoonefield(author)

3.查詢

class wife(models.model):

name = models.charfiled(...)

age = models.integerfield(...)

author = models.onetoonefield(author)

正向查詢:通過 wife 找 author

# 獲取id為1的wife的資訊

wife = wife.objects.get(id=1)

# 再獲取wife所關聯的author

author = wife.author

反向查詢:通過 author 找 wife

django 會通過 onetoonefield() 在關聯的實體類中增加乙個隱式屬性,表示對當前實體的引用

隱式屬性名成為 :當前類名的全小寫形式

# 先獲取id為2的author的資訊

author=author.objects.get(id=2)

# 再獲取author對應的wife

wife = author.wife

1.什麼是一對多

a表中的一條資料可以與b表中的任意多條資料相關聯

b表中的一條資料只能與a表中的一條資料相關聯

商品型別 與 商品之間的關係

出版社(publisher) 與 圖書(book)

2.在資料庫中的體現

通過外來鍵(foreign key) 來實現一對多

在"多"表中增加外來鍵(foreign key)對"一"表中的主鍵進行引用

3.語法

通過外來鍵(foreign key)

在"多"實體中,增加:

屬性 = models.foreignkey(entry)

4.查詢

book(多) 和 publisher(一)

class book(models.model):

... ...

publisher = models.foreignkey(publisher)

正向查詢 : 通過 book 查詢 publisher

book=book.objects.get(id=1)

publisher=book.publisher

反向查詢 : 通過 publisher 查詢 book

django會通過foreignkey()向關聯的類中增加乙個隱式屬性 : 當前類_set

1.什麼是多對多

a表中的一條記錄可以與b表中的任意多條記錄相匹配

b表中的一條記錄可以與a表中的任意多條記錄相匹配

2.在資料庫中的體現

必須建立第三張表,關聯涉及到的兩張表的資料

3.語法

在涉及到的兩個類的任意乙個類中,都可以增加對另外乙個類的多對多的引用

entry=models.manytomanyfield(entry)

ex:建立書籍和作者之間的多對多的引用

可以在書籍實體中,增加多作者的引用

可以在作者實體中,增加對書籍的引用

以上方式 二選一

class book(models.model):

title = models.charfield(***)

publicate_date = models.datefield()

author = models.manytomanyfield(author)

4.查詢

class book(models.model):

title = models.charfield(***)

publicate_date = models.datefield()

author = models.manytomanyfield(author)

正向查詢:通過book找到對應的所有的author

# 查詢id為1的書籍的資訊

book=book.objects.get(id=1)

# 查詢book對應的所有的作者

authors=book.author.all()

通過關聯屬性查詢對應的所有資訊

反向查詢:通過author查詢所有的book

django會通過manytomanyfield()在關聯類中增加乙個隱式屬性

屬性名:當前類_set

# 查詢id為2的author的資訊

author = author.objects.get(id=2)

# 查詢author對應的所有的書籍

books=author.book_set.all()

練習:建立 author 與 publisher 多對多關係

1.查詢 老舍 所簽約的所有出版社

2.查詢 北京大學出版社 下所有的簽約作者

物件關係對映

雙向一對一對映 class card 把關係的維護交給多方物件的屬性去維護關係 c 關係的擁有方負責關係的維護,在擁有方建立外來鍵。所以用到 joincolumn cascade 設定級聯關係,這種關係是遞迴呼叫 可以是 cascadetype.persist 級聯新建 cascadetype.re...

物件關係對映

雙向一對一對映 class card 把關係的維護交給多方物件的屬性去維護關係 c 關係的擁有方負責關係的維護,在擁有方建立外來鍵。所以用到 joincolumn cascade 設定級聯關係,這種關係是遞迴呼叫 可以是 cascadetype.persist 級聯新建 cascadetype.re...

Servlet對映關係

在web.xml文件中 servletdemo1 利用哪個名字可登陸 url pattern 標籤中若是填 的話,無論怎麼訪問都是這個servlet name中的servlet url pattern 標籤中若是填 html 的話,無論訪問哪個html檔案訪問的都是這個servlet name中的s...