django模型 資料庫設計學習

2022-09-09 17:09:37 字數 2552 閱讀 6926

作用:設計的好,會清晰,且易於理解,後續開發也事半功倍,易於維護。

1.一對一的表,兩表的屬性實際上完全可以合併成乙個表,共用乙個主鍵即可;

2.一對多的表,可以設中間關聯表,也可以將關聯表併入「多」這頭;若設獨立關聯表,則可引入「多」這頭的主鍵作為其主鍵,也可另立主鍵並將「一」和「多」兩表的主鍵作為關聯表的外來鍵;

3.多對多的表,則必須設中間關聯表,關聯表設獨立主鍵,並引入兩個「多」頭的表的主鍵作為關聯表的外來鍵。

4.能用1對1的,就不用1對多;能用1對多的,就不用多對多,往簡單化方向靠;

5.能當屬性處理的,盡量當屬性,而不是當實體處理去另立新表,這樣可使問題簡化。

6.把意義相近聯絡緊密的屬性放在一張表內,而不是拆在多張表中。

三種關係解讀:

foreignkey: 多對一

manytomanyfield:多對多

onetoonefield: 一對一

多對多的關係,例如學生與社團。乙個學生可以進多個社團,乙個社團可以有多個學生。那麼在django怎麼建立這種表關係呢?

django建立多對多關係有兩種方法。

方法一:

1 class student(models.model):

2 name= models.charfield(max_length=16)

3 birthday=models.datefield()

4 class club(models.model):

5 name= models.charfield(max_length=16)

6 members = models.manytomanyfield("student")

只需要在任意一方加上類似第6行的manytomanyfield就可以了。django會自動為多對多關聯關係建立一張表,用於兩張表的聯絡。

那麼查詢呢?

1.乙個社團的全部成員(查出來的是物件)

c = club.objects.get(id=1)

c.members.all()

2.乙個成員的全部社團(查出來的是物件)

s = student.objects.filter(id=1)

s.club_set.all() # 類名的小寫+_set

方法二:(比較靈活)

自己手動建立一張表關聯聯絡。

class student(models.model):

name= models.charfield(max_length=16)

birthday=models.datefield()

class club(models.model):

name= models.charfield(max_length=16)

class membership(models.model):

student = models.foreignkey("student")

club = models.foreignkey("club")

那麼這種方式建表怎麼查詢呢?

乙個學生加入的全部社團:

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

b = a.membership_set.all() # 查出來的是物件

for i in b:

print(i.club.name)

乙個社團的全部學生:

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

b = a.membership_set.all() # 查出來的是物件

for i in b:

print(i.student.name)

自關聯模型,就是表中的某一列,關聯了這個表中的另外一列。最典型的自關聯模型就是地區表。省、市、縣都在一張表裡面。省的pid為null,市的pid為省的id,縣的pid為市的id。

示例:

class area(models.model):    

name = models.charfield(max_length=20, verbose_name='名稱')

# 自關聯(特殊的一對多): 生成的欄位名 parent_id

parent = models.foreignkey('self', verbose_name='上級行政區劃')

class meta:

db_table = 'tb_areas'

verbose_name = '行政區劃'

那麼,怎麼查詢呢?

如果知道乙個市,叫a市,想查他屬於什麼省。

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

# b就是a市的省份的物件

b = a.parent

如果知道乙個省,叫a省,想查他有什麼市。

a = area.object.get(id=1)

# b就是a省的全部市的物件

b = a.area_set.all() #類名小寫+'_set'b

Django 模型(資料庫)

1.新建專案和應用 django admin.py startproject learn models 新建乙個專案 cd learn models 進入到該項目的資料夾 2.新增應用 django.contrib.admin django.contrib.auth django.contrib.c...

django學習筆記 (七)模型(資料庫)

django模型與資料庫相關,與資料庫相關的 一般寫在models.py中。django支援sqlite3,mysql,postgresql等資料庫,只需要在settings.py中配置即可,不用修改models.py的 將people models.py改為 from django.db impo...

Django模型資料庫配置

在虛擬開發環境中,安裝mysql的資料庫驅動mysqlclient pip install mysqlclient在項 的 settings.py 件中找到databases 配置項,將其資訊修改為 databases 屬性定義語法為 屬性 models.欄位型別 選項 屬性命名規則 autofie...