欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django的模型類管理器——數(shù)據(jù)庫(kù)操作的封裝詳解

 更新時(shí)間:2020年04月01日 09:38:55   作者:稀里糊涂林老冷  
這篇文章主要介紹了django的模型類管理器——數(shù)據(jù)庫(kù)操作的封裝詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

模型實(shí)例方法

str():在將對(duì)象轉(zhuǎn)換成字符串時(shí)會(huì)被調(diào)用。

save():將模型對(duì)象保存到數(shù)據(jù)表中,ORM框架會(huì)轉(zhuǎn)換成對(duì)應(yīng)的insert或update語(yǔ)句。

delete():將模型對(duì)象從數(shù)據(jù)表中刪除,ORM框架會(huì)轉(zhuǎn)換成對(duì)應(yīng)的delete語(yǔ)句。

模型類的屬性

屬性objects:管理器,是Manager類型的對(duì)象,用于與數(shù)據(jù)庫(kù)進(jìn)行交互。

當(dāng)沒(méi)有為模型類定義管理器時(shí),Django會(huì)為模型類生成一個(gè)名為objects的管理器,自定義管理器后,Django不再生成默認(rèn)管理器objects。

管理器是Django的模型進(jìn)行數(shù)據(jù)庫(kù)操作的接口,Django應(yīng)用的每個(gè)模型都擁有至少一個(gè)管理器。Django支持自定義管理器類,繼承自models.Manager。

自定義管理器類主要用于兩種情況:

1.修改原始查詢集,重寫all()方法

2.向管理器類中添加額外的方法,如向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)。

1.修改原始查詢集,重寫all()方法。

#圖書管理器
class BookInfoManager(models.Manager):
 def all(self):
  #默認(rèn)查詢未刪除的圖書信息
  #調(diào)用父類的成員語(yǔ)法為:super().方法名
  return super().all().filter(isDelete=False)

b)在模型類BookInfo中定義管理器

class BookInfo(models.Model):
 ...
 books = BookInfoManager()

2.在管理器類中定義創(chuàng)建對(duì)象的方法

當(dāng)創(chuàng)建模型類對(duì)象時(shí),django不會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫操作,調(diào)用save()方法才與數(shù)據(jù)庫(kù)交互,進(jìn)行insert或update操作,將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。如果模型類的屬性比較多,逐個(gè)屬性賦值很麻煩,推薦使用管理器

class BookInfoManager(models.Manager):
 ...
 #創(chuàng)建模型類,接收參數(shù)為屬性賦值
 def create_book(self, title, pub_date):
  #創(chuàng)建模型類對(duì)象self.model可以獲得模型類
  book = self.model()
  book.btitle = title
  book.bpub_date = pub_date
  book.bread=0
  book.bcommet=0
  book.isDelete = False
  # 將數(shù)據(jù)插入進(jìn)數(shù)據(jù)表
  book.save()
  return book

b)為模型類BookInfo定義管理器books語(yǔ)法如下

class BookInfo(models.Model):
 ...
 books = BookInfoManager()

c)調(diào)用語(yǔ)法如下:

調(diào)用:

book=BookInfo.books.create_book("abc",date(1980,1,1))

補(bǔ)充知識(shí):Django中的模型類管理器以及自定義管理器

模型類.objects.all()->objects是一個(gè)什么東西呢?

答:objects是Django幫我自動(dòng)生成的管理器對(duì)象,通過(guò)這個(gè)管理器可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢。

objects是models.Manger類的一個(gè)對(duì)象

自定義管理器之后Django不再幫我們生成默認(rèn)的objects管理器。

使用博客之前使用過(guò)的模型類,然后在項(xiàng)目的shell中導(dǎo)入模型類,進(jìn)行查看類型

自定義模型管理器類

自定義一個(gè)管理器類,這個(gè)類繼承models.Manger類。

再在具體的模型類里定義一個(gè)自定義管理器類的對(duì)象。

定義一個(gè)模型管理器類,然后在模型類中使用

class BookInfoManager(models.Manager):
 """圖書模型管理器類"""
 pass
 
class BookInfo(models.Model):
 """圖書模型類"""
 # 圖書名稱
 btitle = models.CharField(max_length=20)
 # 出版日期
 bpub_date = models.DateField()
 # 閱讀量
 bread = models.IntegerField(default=0)
 # 評(píng)論量
 bcomment = models.IntegerField(default=0)
 # 刪除標(biāo)記
 isDelete = models.BooleanField(default=False)
 
 '''自定義管理器'''
 book = BookInfoManager()

然后在項(xiàng)目的shell中,

我們一旦自定義了管理器,就要使用定義的管理器查詢,可以看到我們自定義的Manager

自定義管理器類的應(yīng)用場(chǎng)景

1.改變查詢的結(jié)果集。

比如調(diào)用BookInfo.books.all()返回的是沒(méi)有刪除的圖書的數(shù)據(jù)。

2.添加額外的方法。

管理器類中定義一個(gè)方法幫我們操作模型類對(duì)應(yīng)的數(shù)據(jù)表。

使用self.model()就可以創(chuàng)建一個(gè)跟自定義管理器對(duì)應(yīng)的模型類對(duì)象。

1.舉例,模型類對(duì)應(yīng)的表中有這個(gè)表

現(xiàn)在通過(guò)BookInfo.book.all()自定義管理器只取到isDelete為0的數(shù)據(jù)

重寫all()方法,如果有其他的需求的時(shí)候可以重新其他對(duì)應(yīng)的方法

class BookInfoManager(models.Manager):
 """圖書模型管理器類"""
 # 改變查詢的結(jié)果集
 def all(self):
  # 1.調(diào)用父類的all,獲取所有數(shù)據(jù)
  books = super().all() # QuerySet
  # 2.對(duì)數(shù)據(jù)進(jìn)行過(guò)濾
  books = books.filter(isDelete=False)
  # 3.返回books
  return books

然后進(jìn)行驗(yàn)證,重新打開項(xiàng)目的shell,進(jìn)行查詢之后就獲取到了4條數(shù)據(jù)(過(guò)濾掉了一條)

2.為模型類添加額外的方法,使其通過(guò)模型類.方法名就可以插入保存數(shù)據(jù)

class BookInfoManager(models.Manager):
 """圖書模型管理器類"""
 
 # 改變查詢的結(jié)果集
 def all(self):
  # 1.調(diào)用父類的all,獲取所有數(shù)據(jù)
  books = super().all() # QuerySet
  # 2.對(duì)數(shù)據(jù)進(jìn)行過(guò)濾
  books = books.filter(isDelete=False)
  # 3.返回books
  return books
 
 # 封裝函數(shù):操作模型類對(duì)應(yīng)的數(shù)據(jù)表
 '''添加額外的方法'''
 def create_book(self, btitle, bpub_date):
  # 1.創(chuàng)建一個(gè)圖書對(duì)象
  model_class = self.model
  book = model_class()
  book.btitle = btitle
  book.bpub_date = bpub_date
  # 2. 保存進(jìn)數(shù)據(jù)庫(kù)
  book.save()
  # 3. 返回obj
  return book

然后重新進(jìn)入到項(xiàng)目的shell中進(jìn)行插入,注意:日期要符合日期字符串的格式,或者使用date()函數(shù)

數(shù)據(jù)中也相應(yīng)的有了該條數(shù)據(jù),因?yàn)槲覀冊(cè)陬~外的方法中使用了save()函數(shù)保存到數(shù)據(jù)庫(kù)

這個(gè)額外的方法通常寫在管理器中,當(dāng)然也可以寫在模型類中,當(dāng)寫在模型類中,使用的時(shí)候則直接模型類調(diào)用該方法就行了,并且定義成模型類的類方法。注意區(qū)別

把方法定義在管理器的時(shí)候,管理器中有個(gè)自帶的方法create(),使用這個(gè)時(shí)候必須帶參數(shù)

數(shù)據(jù)庫(kù)就已經(jīng)有了

模型管理器類和模型類的關(guān)系

以上這篇django的模型類管理器——數(shù)據(jù)庫(kù)操作的封裝詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytorch制作自己的LMDB數(shù)據(jù)操作示例

    pytorch制作自己的LMDB數(shù)據(jù)操作示例

    這篇文章主要介紹了pytorch制作自己的LMDB數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了pytorch使用lmdb的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法

    python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法

    這篇文章主要介紹了python之PyAutoGui教你做個(gè)自動(dòng)腳本計(jì)算器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python庫(kù)安裝速度過(guò)慢解決方案

    Python庫(kù)安裝速度過(guò)慢解決方案

    這篇文章主要介紹了Python庫(kù)安裝速度過(guò)慢解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python實(shí)現(xiàn)TCP文件接收發(fā)送

    python實(shí)現(xiàn)TCP文件接收發(fā)送

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)TCP文件接收發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python3.6環(huán)境下安裝freetype庫(kù)和基本使用方法(推薦)

    python3.6環(huán)境下安裝freetype庫(kù)和基本使用方法(推薦)

    這篇文章主要介紹了python3.6環(huán)境下如何安裝freetype庫(kù)和基本使用方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python使用zmail進(jìn)行郵件發(fā)送的示例詳解

    Python使用zmail進(jìn)行郵件發(fā)送的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python如何使用zmail進(jìn)行郵件發(fā)送功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-03-03
  • PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?

    PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Pandas中describe()函數(shù)的具體使用

    Pandas中describe()函數(shù)的具體使用

    本文主要介紹了Pandas中describe()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    這篇文章主要給大家介紹了關(guān)于OpenCV圖像變換之傅里葉變換的相關(guān)資料,傅里葉變換可以將一幅圖片分解為正弦和余弦兩個(gè)分量,換而言之,他可以將一幅圖像從其空間域(spatial domain)轉(zhuǎn)換為頻域(frequency domain),需要的朋友可以參考下
    2021-07-07
  • Python庫(kù)中可以操作JavaScript盤點(diǎn)解析

    Python庫(kù)中可以操作JavaScript盤點(diǎn)解析

    這篇文章主要為大家介紹了Python庫(kù)之可以操作JavaScript盤點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論