最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django數據映射(一對一,一對多,多對多)

 更新時間:2022年08月10日 15:25:04   作者:碼農的禿頭之旅  
本文主要介紹了Django數據映射(一對一,一對多,多對多),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

數據表關聯關系映射

常用的表關聯方式有三種:

一對一映射
如: 一個身份證對應一個人

一對多映射
如: 一個班級可以有多個學生

多對多映射
如: 一個學生可以報多個課程,一個課程可以有多個學生學習

一對一映射

  • 一對一是表示現實事物間存在的一對一的對應關系。
  • 如:一個家庭只有一個戶主,一個男人有一個妻子,一個人有一個唯一的指紋信息等

語法

class A(model.Model):
    ...
class B(model.Model):
    屬性 = models.OneToOneField(A, on_delete=xxx)

外鍵類字段選項

特殊字段參數【必須項】:

on_delete

  • models.CASCADE 級聯刪除。 Django模擬SQL約束ON DELETE CASCADE的行為,并刪除包含ForeignKey的對象。
  • models.PROTECT 拋出ProtectedError 以阻止被引用對象的刪除;[等同于mysql默認的RESTRICT]
  • models.SET_NULL 設置ForeignKey null;需要指定null=True
  • models.SET_DEFAULT 將ForeignKey設置為其默認值;必須設置ForeignKey的默認值。
  • … 其它參請參考文檔 https://docs.djangoproject.com/en/2.2/ref/models/fields/#foreignkey

其余常用的字段選項【非必須項】;如:

  • null
  • unique 等

用法示例

創(chuàng)建作家和作家妻子類

# file : xxxxxxxx/models.py
from django.db import models

class Author(models.Model):
? ? '''作家模型類'''
? ? name = models.CharField('作家', max_length=50)

class Wife(models.Model):
? ? '''作家妻子模型類'''
? ? name = models.CharField("妻子", max_length=50)
? ? author = models.OneToOneField(Author, on_delete=models.CASCADE) ?# 增加一對一屬性?

創(chuàng)建一對一的數據記錄

from .models import *
author1 = Author.objects.create(name='王老師')
wife1 = Wife.objects.create(name='王夫人', author=author1)  # 關聯王老師
author2 = Author.objects.create(name='小澤老師')  # 一對一可以沒有數據對應的數據 

數據查詢

正向查詢

直接通過關聯屬性查詢即可

# 通過 wife 找 author
from .models import Wife
wife = Wife.objects.get(name='王夫人')
print(wife.name, '的老公是', wife.author.name)

反向查詢

  • 通過反向關聯屬性查詢
  • 反向關聯屬性為實例對象.引用類名(小寫),如作家的反向引用為作家對象.wife
  • 當反向引用不存在時,則會觸發(fā)異常
# 通過 author.wife 關聯屬性 找 wife,如果沒有對應的wife則觸發(fā)異常
author1 = Author.objects.get(name='王老師')
print(author1.name, '的妻子是', author1.wife.name)
author2 = Author.objects.get(name='小澤老師')
try:
    print(author2.name, '的妻子是', author2.wife.name)
except:
    print(author2.name, '還沒有妻子')

一對多映射

  • 一對多是表示現實事物間存在的一對多的對應關系。
  • 如:一個學校有多個班級,一個班級有多個學生, 一本圖書只能屬于一個出版社,一個出版社允許出版多本圖書

語法

當一個A類對象可以關聯多個B類對象時

class A(model.Model):
? ? ...

class B(model.Model):
? ? 屬性 = models.ForeignKey("一"的模型類, on_delete=xx)

用法示例

有二個出版社對應五本書的情況.

清華大學出版社 有書

  • C++
  • Java
  • Python

北京大學出版社 有書

  • 西游記
  • 水滸

創(chuàng)建模型類

# file: otm/models.py
from django.db import models

class Publisher(models.Model):
?? ?'''出版社【一】'''
? ? name = models.CharField('名稱', max_length=50, unique=True)

class Book(models.Model):
? ? '''書【多】'''
? ? title = models.CharField('書名', max_length=50)
? ? publisher = ForeignKey(Publisher, on_delete=models.CASCADE)

創(chuàng)建數據

#先創(chuàng)建 '一' ,再創(chuàng)建 '多'
from .models import *
pub1 = Publisher.objects.create(name='清華大學出版社')
Book.objects.create(title='C++', publisher=pub1)
Book.objects.create(title='Java', publisher_id=1)

#高級創(chuàng)建 - 利用 反向屬性
pub2 = Publisher.objects.create(name='北京大學出版社')
pub2.book_set.create(title='西游記')

數據查詢

通過 Book 查詢 Publisher【正向】

通過 publisher 屬性查詢即可
???????book.publisher
 
abook = Book.objects.get(id=1)
print(abook.title, '的出版社是:', abook.publisher.name)

通過 Publisher 查詢 對應的所有的 Book 【反向】

Django會在Publisher中增加一個屬性來表示對對應的Book們的查詢引用
屬性:book_set  等價于 objects

# 通過出版社查詢對應的書
pub1 = Publisher.objects.get(name='清華大學出版社')
books = pub1.book_set.all()  # 通過book_set 獲取pub1對應的多個Book數據對象
#books = Book.objects.filter(publisher=pub1)  # 也可以采用此方式獲取
print("清華大學出版社的書有:")
for book in books:
   print(book.title)

多對多映射

多對多表達對象之間多對多復雜關系,如: 每個人都有不同的學校(小學,初中,高中,…),每個學校都有不同的學生…
語法

在關聯的兩個類中的任意一個類中,增加:

屬性 = models.ManyToManyField(MyModel)

用法示例

  • 一個作者可以出版多本圖書
  • 一本圖書可以被多名作者同時編寫
class Author(models.Model):
? ? ...

class Book(models.Model):
? ? ...
? ? authors = models.ManyToManyField(Author)

創(chuàng)建模型類

class Author(models.Model):
    '''作家模型類'''
    name = models.CharField('作家', max_length=50)
    def __str__(self):
        return self.name
    
class Book(models.Model):
    '''書模型類'''
    title = models.CharField('書名', max_length=50)
    authors = models.ManyToManyField(Author)
    def __str__(self):
           return self.title 

創(chuàng)建數據

方案1 先創(chuàng)建 author 再關聯 book
    author1 = Author.objects.create(name='呂老師')
    author2 = Author.objects.create(name='王老師')
    # 呂老師和王老師同時寫了一本Python
    book11 = author1.book_set.create(title="Python")
    author2.book_set.add(book11) 
    
方案2 先創(chuàng)建 book 再關聯 author
    book = Book.objects.create(title='python1')
    #郭小鬧和呂老師都參與了 python1 的 創(chuàng)作
    author3 = book.authors.create(name='guoxiaonao')
    book.authors.add(author1)

數據查詢

通過 Book 查詢對應的所有的 Author【正向】

book.authors.all() -> 獲取 book 對應的所有的author的信息
book.authors.filter(age__gt=80) -> 獲取book對應的作者中年齡大于80歲的作者的信息

通過 Author 查詢對應的所有的Book【反向】

Django會生成一個反向屬性 book_set 用于表示對對應的book的查詢對象相關操作

author.book_set.all()
author.book_set.filter()

到此這篇關于Django數據映射(一對一,一對多,多對多)的文章就介紹到這了,更多相關Django 數據映射內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django使用paginator插件實現翻頁功能的實例

    Django使用paginator插件實現翻頁功能的實例

    今天小編就為大家分享一篇關于Django使用paginator插件實現翻頁功能的實例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • pyspark給dataframe增加新的一列的實現示例

    pyspark給dataframe增加新的一列的實現示例

    這篇文章主要介紹了pyspark給dataframe增加新的一列的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python OpenCV 圖像平移的實現示例

    Python OpenCV 圖像平移的實現示例

    本篇博客學習OpenCV 中關于圖像平移的方法,核心學習到的方法是warpAffine,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • 對python xlrd讀取datetime類型數據的方法詳解

    對python xlrd讀取datetime類型數據的方法詳解

    今天小編就為大家分享一篇對python xlrd讀取datetime類型數據的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 如何使用 Python 中的功能和庫創(chuàng)建 n-gram的過程

    如何使用 Python 中的功能和庫創(chuàng)建 n-gram的過程

    在計算語言學中,n-gram 對于語言處理、上下文和語義分析非常重要,本文將討論如何使用 Python 中的功能和庫創(chuàng)建 n-gram,感興趣的朋友一起看看吧
    2023-09-09
  • 新手如何快速入門Python(菜鳥必看篇)

    新手如何快速入門Python(菜鳥必看篇)

    下面小編就為大家?guī)硪黄率秩绾慰焖偃腴TPython(菜鳥必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python中__init__.py文件的作用詳解

    Python中__init__.py文件的作用詳解

    __init__.py 文件的作用是將文件夾變?yōu)橐粋€Python模塊,Python 中的每個模塊的包中,都有__init__.py 文件.這篇文章主要介紹了Python中__init__.py文件的作用詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • python目標檢測實現黑花屏分類任務示例

    python目標檢測實現黑花屏分類任務示例

    這篇文章主要為大家介紹了python目標檢測實現黑花屏分類任務示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 詳解pyppeteer(python版puppeteer)基本使用

    詳解pyppeteer(python版puppeteer)基本使用

    這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Python?async模塊使用方法雜談

    Python?async模塊使用方法雜談

    協(xié)程(Coroutine),也可以被稱為微線程,是一種用戶態(tài)內的上下文切換技術。簡而言之,其實就是通過一個線程實現代碼塊相互切換執(zhí)行
    2023-04-04

最新評論

若尔盖县| 曲沃县| 思茅市| 舟山市| 白玉县| 碌曲县| 巨鹿县| 镶黄旗| 潜山县| 枞阳县| 桐城市| 涞源县| 五寨县| 高碑店市| 扎鲁特旗| 三门峡市| 洞口县| 慈溪市| 青浦区| 汾阳市| 府谷县| 长垣县| 阿拉善右旗| 绵竹市| 福安市| 和平区| 邛崃市| 四子王旗| 腾冲县| 阿拉善右旗| 邹城市| 阜平县| 汤原县| 英德市| 永寿县| 泽州县| 池州市| 绵阳市| 定边县| 南投市| 报价|