我先定義兩個模型,乙個是作者,乙個是作者出版的書籍,算是一對多的型別。
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 plaincopy
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 plaincopy
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如果存在外來鍵關係的話,任何修改主表主鍵欄位和刪除...