本文主要描述Django數據中一對一的數據關系,創建app等配置不再贅述。
Django操作數據庫,使用ORM
ORM:關系映射對象,把傳統的SQL語句封裝成了類和對象的形式,在操作表中的記錄時,就像在操作類和對象一樣。
使用默認數據庫:sqlite
操作在models.py文件中完成。
一對多數據關系:
一對多關系是通過‘子表’中設置‘父表’的外鍵約束來完成關聯
父表的一個數據對應子表中的多個數據
舉例:班級和學生
class Classes(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=10, null=True) # 班級名稱 num = models.IntegerField(null=True) # 班級人數 class Meta: db_table = 'Classes' def __unicode__(self): return 'classname:%s | classnum:%s' % (self.name, self.num) class Student(models.Model): id = models.AutoField(primary_key=True) # 關聯‘父表’,設置外鍵 classes = models.ForeignKey(Classes, on_delete=models.CASCADE) name = models.CharField(max_length=20, null=True) age = models.IntegerField(null=True) class Meta: db_table = 'Student' def __unicode__(self): return 'studentname:%s | studentage:%s' % (self.name, self.age)
創建完數據庫模型之后,我們要創建數據庫變更文件以及應用表更文件等操作,具體操作步驟,參考上篇文章《Django數據庫一對一數據關系》
對數據表中數據的查詢操作
1)從子表中查詢父表的數據
print s1.classes.num 學生在所在班級的總人數
print s1.classes 學生所在班級的所有信息
2)從父表中查詢子表的相關數據
1. 查詢一個班級的所有學生,通過student_set屬性查詢
print c1.student_set.all()
2.filter:根據條件,去結果集中進行匹配查詢
print c1.student_set.filter(name='lisi')
3. get :根據條件,去結果集中進行匹配查詢
print c1.student_set.get(name='lisi')
get()和filter()方法的區別
get():只能查詢出一個結果,如果查詢的結果不止一個,name使用get()方法會報錯
filter():可以根據條件,匹配一組結果,得到一個結果集
XXX.set :Django提供的用於通過主模型(父表)對象訪問子模型(子表)對象集合的屬性名。