电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:10日期:2024-10-13 18:06:47

模型實例方法

str():在將對象轉換成字符串時會被調用。

save():將模型對象保存到數(shù)據(jù)表中,ORM框架會轉換成對應的insert或update語句。

delete():將模型對象從數(shù)據(jù)表中刪除,ORM框架會轉換成對應的delete語句。

模型類的屬性

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

當沒有為模型類定義管理器時,Django會為模型類生成一個名為objects的管理器,自定義管理器后,Django不再生成默認管理器objects。

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

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

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

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

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

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

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

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

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

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

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

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

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

c)調用語法如下:

調用:

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

補充知識:Django中的模型類管理器以及自定義管理器

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

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

objects是models.Manger類的一個對象

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

使用博客之前使用過的模型類,然后在項目的shell中導入模型類,進行查看類型

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

自定義模型管理器類

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

再在具體的模型類里定義一個自定義管理器類的對象。

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

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

然后在項目的shell中,

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

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

自定義管理器類的應用場景

1.改變查詢的結果集。

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

2.添加額外的方法。

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

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

1.舉例,模型類對應的表中有這個表

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

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

重寫all()方法,如果有其他的需求的時候可以重新其他對應的方法

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

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

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

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

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

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

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

數(shù)據(jù)中也相應的有了該條數(shù)據(jù),因為我們在額外的方法中使用了save()函數(shù)保存到數(shù)據(jù)庫

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

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

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

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

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

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

模型管理器類和模型類的關系

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

以上這篇django的模型類管理器——數(shù)據(jù)庫操作的封裝詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Django
相關文章:
主站蜘蛛池模板: 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 陕西自考报名_陕西自学考试网 | 深圳法律咨询【24小时在线】深圳律师咨询免费 | 微学堂-电动能源汽车评测_电动车性能分享网 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 沟盖板_复合沟盖板厂_电力盖板_树脂雨水篦子-淄博拜斯特 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 长城人品牌官网| PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 |