FYI django資料庫操作 外來鍵

2022-08-30 10:15:08 字數 3326 閱讀 2167

我先定義兩個模型,乙個是作者,乙個是作者出版的書籍,算是一對多的型別。

class person(models.model);

name = models.charfield('作者姓名', max_length=10)

age = models.integerfield('作者年齡')

class book(models.model):

person = models.foreignkey(person, related_name='person_book')

title = models.charfield('書籍名稱', max_length=10)

pubtime = models.datefield('出版時間')

如果我們要查詢乙個作者出版了哪些書籍的話,那我們要怎麼做呢?

先查找到作者的資訊

person = person.objects.fiter(你的條件)

返回乙個person物件

接下來就查詢person關聯的所有書籍物件

book = person.book_set.all()

django 預設每個主表的物件都有乙個是外來鍵的屬性,可以通過它來查詢到所有屬於主表的子表的資訊。

這個屬性的名稱預設是以子表的名稱小寫加上_set()來表示,預設返回的是乙個querydict物件,你可以繼續的根據情況來查詢等操作。

如果你覺得上面的定義比較麻煩的話,你也可以在定義主表的外來鍵的時候,給這個外來鍵定義好乙個名稱。要用related_name比如:

person = models.foreignkey(person, related_name='person_set')

那麼上面的話:book = person.book_set.all()

也可以用book = person.person_set.all()

上面的是查詢是通過主表來查詢子表的信。

下面我簡單的說下通過子表來查詢主表的資訊。

假設我要查詢一本書籍所關聯的作者的資訊,那我可以通過下面的步驟來實現:

假如我先得到了乙個子表的物件。那我只要獲取該物件關聯主表的外來鍵的熟悉,就可以得到主表的資訊了。

比如我得到乙個book物件,然後我想得到book物件的主表person的資訊的話:

p = book.person

我個人感覺person有點像指標,儲存著person主表物件的位址,呵呵!不過python沒有指標這個概念,這是我覺的更好理解。

一、一對多(外來鍵)

例子:乙個作者對應多本書,一本書只有乙個作者

model**:

[python]view plain

copy

class person(models.model);  

name = models.charfield('作者姓名', max_length=10)  

age = models.integerfield('作者年齡')  

class book(models.model):  

person = models.foreignkey(person, related_name='person_book')  

title = models.charfield('書籍名稱', max_length=10)  

pubtime = models.datefield('出版時間')  

(一)獲取物件方法:

1.從作者出發獲取書籍

[python]view plain

copy

person = person.objects.fiter(你的條件)  

book = person.book_set.all()  

2.從書籍出發獲取作者

[python]view plain

copy

p = book.person  

例子:乙個作者對應多本書,一本書有多個作者

model**:

[python]view plain

copy

class author(models.model):    

first_name = models.charfield(max_length=30)    

last_name = models.charfield(max_length=40)    

email = models.emailfield()    

class book(models.model):    

title = models.charfield(max_length=200)    

authors = models.manytomanyfield(author)    

(一)獲取物件方法:

1.從書籍出發獲取作者

[python]view plain

copy

b = book.objects.get(id=50)  

b.authors.all()  

b.authors.filter(first_name='adam')  

2.從作者出發獲取書籍

[python]view plain

copy

a = author.objects.get(id=1)  

a.book_set.all()  

(二)新增物件方法:

[python]view plain

copy

a = author.objects.get(id=1)  

b = book.objects.get(id=50)  

b.authors.add(a)  

(三)刪除物件物件方法:

[python]view plain

copy

a = author.objects.get(id=1)  

b = book.objects.get(id=50)  

b.authors.remove(a) 或者 b.authors.filter(id=1).delete()  

資料庫操作 內連線外連線

內連線 只連線匹配的行 左外連線 包含左邊表的全部行 不管右邊的表中是否存在與它們匹配的行 以及右邊表中全部匹配的行 右外連線 包含右邊表的全部行 不管左邊的表中是否存在與它們匹配的行 以及左邊表中全部匹配的行 全外連線 包含左 右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。表aid ...

資料庫外連線

外連線的理解 就是具有外來鍵關係的兩張表之間的關係,比如學生表student裡面的studentid可能在分數表score裡面是乙個外來鍵stuid,正常情況下,學生表裡面有了學生的資訊資料之後,那麼在score表裡面也應該對應的有資訊,但是現在存在的問題就是有了studentid不一定會在分數表中...

資料庫 外來鍵

外來鍵是什麼?外來鍵 fk 是用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。外來鍵資料庫一級的完整性約束,由資料庫自行維護.你也可以手動建立.1如果存在外來鍵關係的話,任何修改主表主鍵欄位和刪除...