Django08:模型層(ORM)--測試腳本/必知的13條/神器的雙下劃線查詢/多表操作

單表操作

django 自帶的sqlite3數據庫對日期格式不是很敏感,處理的時候容易出錯。

?

測試腳本

測試環境準備:去manage.py 中拷貝錢四行代碼,然后自己手寫兩行。

腳本無論在引用下面,還是單獨開設PY文件都可以。

import os
import sysif __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysiteday62.settings")#手寫2行import djangodjango.setup()#所有代碼都必須在下面,包括import命令from app01 import models#不需要遷移命令#增user_obj=models.User(username=username,password=password)User_obj.save() #保存數據#刪除   models.Book.objects.filter(pk=2).delete()#pk會自動查找當前表的主鍵字段#用了PK,不需要查看主鍵字段名字 uid pid sid...#第二種usr_obj=models.Book.objects.filter(pk=2)usr_obj.delete()#修改#get 不推薦,沒有數值會報錯edit_book_obj = models.Book.objects.get(pk=edit_id)#推薦models.Book.objects.filter(pk=edit_id).update(book_title=new_title ,publisher=new_publisher_id )

?

必知的13條

1.all()
2.filter() 可以主鍵用pk替代
3.get() 直接拿數據,但條件不存在會報錯。
4.first()
5.last()6.values() #指定獲取的數據的字段。返回結果列表套字典res=models.User.objects.values('name','age')7. values_list() #返回列表套元組res.query 查看sql語句方式,只有queryset對象才行8.distinct() 去重復,有主鍵不能去除,一定要一模一樣的數據,一定不要忽略主鍵9. order_by() 
res=models.User.objects.order_by('age') 默認升序
res=models.User.objects.order_by('-age') #降序 加‘-’10. reverse() 反轉,前提是 數據已經排序,跟在order_by()11. count()  #統計個數12. exclude() #排除在外
res=models.User.objects.exclude(name='jason')13. exists()  #是否存在,返回布爾值. 基本用不到,數據包含布爾值。

?

神器的雙下劃線查詢

#查詢小于35歲
res=models.User.objects.filter(age__lt=35)#小于等于
res=models.User.objects.filter(age__lte=30)#年齡18,或者32,或者40
res=models.User.objects.filter(age__in=[18,32,40])#18到40歲
res=models.User.objects.filter(age__range=[18,40])#名字還有“n”,默認區分大小寫res=models.User.objects.filter(name__contains='n')#忽略大小寫
res=models.User.objects.filter(name__icontains='n')#開頭,結尾
res=models.User.objects.filter(name__startswith='n')
res=models.User.objects.filter(name__endswith='n')#注冊時間2020 1月份
res=models.User.objects.filter(register_time__month='1')
res=models.User.objects.filter(register_time__year'2020')ret = models.Person.objects.filter(birthday__year=2000, birthday__month=5)

?

多表操作

一對多

#增
#1.直接字段 id
models.Books.objects.create(tittle='sanguo',price=123.23,pblicsh_id=1)#2.虛擬字段,對象
publish_obj=models.Publish.objects.filter(pk=2),first()
models.Books.objects.create(tittle='sanguo',price=123.23,pblicsh=publish_obj)#刪除,默認級聯,刪了一個,另外關聯表也刪除。
models.Publish.objects.filter(pk=1).delete()#修改#1
models.Books.objects.filter(pk=1).update(publish_id=2)#2
publish_obj=models.Publish.objects.filter(pk=2),first()
models.Books.objects.filter(pk=1).update(publish=publish_obj)

多對多

# 多對多 增刪改查  就是在操作第三張表#book與authors 多對多#-----增--------
book_obj=models.Book.objects.filter(pk=1).first()
#主鍵為1的書籍,添加一個主鍵為1的作者
book_obj.authors.add(1) #因為多對多,可以添加多個。
book_obj.authors.add(2,3) #方法二
author_obj1=models.Author.objects.filter(pk=1),first()
author_obj2=models.Author.objects.filter(pk=2),first()
author_obj3=models.Author.objects.filter(pk=3),first()
book_obj.authors.add(author_obj1,author_obj2,author_obj3) add給第三張表添加數據,可以數字也可以對象。#--------刪-----------book_obj.authors.remove(2)
book_obj.authors.remove(1,3)#同樣支持對象
book_obj.authors.remove(author_obj1,author_obj2)#------------修改-----------book_obj.authors.set([1,3]) 
book_obj.authors.set([3]) #也支持對象#括號內必須是,可迭代對象。#**先刪除,后新增#-------清空----------#在第三張表,清空某個書籍,與作者關系book_obj.authors.clear()
#不需要參數。

?

多表查詢

正反向概念

外鍵字段在book

book->publish 正向

publish->book 反向

口訣:

正向查找靠字段 :

反向查找靠小寫?? (結果為多個加_set, . 單個不用)

(結果為多個的時候,需要.all())

子查詢(基于對象的跨表查詢)

#1.查詢書籍主鍵為1的出版社
book_obj=models.Book.objects.filter(pk=1),first()
#正向
res=book_obj.publish
print(res.name)#2. 查詢書籍主鍵為2的作者
book_obj=models.Book.objects.filter(pk=2),first()
#正向
res=book_obj.authors.all() #3. 查詢作者jason的電話號碼
author_obj=models.Author.objects.filter(name='jason').first()
res=author_obj.author_detail
print(res.phone)什么時候加.all()
結果為多個加.all()#4.查詢出版社為東方出版社的書
publish_obj=models.Publis.objects.filter(name='東方出版社').first()
#反向, 表名小寫 加_set
res=publish_obj.book_set.all()#5. 查詢作者為jason的書
author_obj=models.Author.objects.filter(name='jason')
res=author_obj.book_set.all() 
print(res)#6. 查詢手機號為110的作者姓名
author_detail_obj=models.AuthorDetail.objects.filter(phone=110).first()
res=auther_detail_obj.author
print(res.name)#***但結果為單個,就不用_set

?

基于雙下劃線跨表查詢

#1.查詢jason的手機號和名字
res=models.Author.objects.filter(name='jason').values('author_detail__phone','name')#反向
res=models.AuthorDetail.objects.filter(author__name='jason').values('phone',author__name)#2. 查詢主鍵為1的出版社名字和書的名字
res=models.Book.objects.filter(pk=1).values('title','publish__name') #表名小寫
#反向
res=models.Publish.objects.filter(book__id=1).valus('name','book__title')#3. 查詢書籍主鍵為1的作者姓名
res=models.Book.objects.filter(pk=1).value('authors__name')
res=models.Author.objects.filter(book__id=1),values('name')#4. 書籍主鍵1的作者的手機號
res=models.Book.objects.filter(pk=1),values('authors__author_detail__phone')

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“互聯網+”促傳統企業三大轉型

2015年是傳統行業互聯網化的元年。國家提出要制定“互聯網”行動計劃后,互聯網旅游、互聯網汽車、互聯網三農、互聯網物流、互聯網醫療等開始起步。同時,面對不確定的移動互聯網時代,互聯網某些技術和模式還在進化、演變之中,每一…

開發高性能ASP.NET應用

本文是“.NET Conf China 2022”上我的一個分享,這里更細化的分享出來。分享分為四個部分:制定指示設計應用正確測試性能優化高性能:不一定是架構出來的,但一定是優化出來的。制定指標-收集首先把項目中的熱路徑API和核心API找出來…

Ethereum-EIPs

What is an EIP? Ethereum Improvement Proposal 以太坊改進建議的文檔 這個文檔向Ethereum社區提供信息,為Ethereum、Ethereum的進程、環境描述一個新特征,該EIP應當為該特征提供一個基本的技術描述和原理原理。該EIP作者有責任在社區和不同意見的文檔…

Django08-1:模型層(ORM)--聚合查詢/分組查詢/F與Q查詢/開啟事務/常用字段及參數/自定義字段/數據庫查詢優化

聚合查詢 單獨使用時,用aggregate 1.只要是跟數據庫相關的模塊 基本都在django.db.models里面 如果沒有應該在django.db里面 2. 聚合查詢通常配合分組使用 from django.db.models import Avg, Sum, Max, Min, Count# 1.所有書的平均價格 resmodels.Book.objects.…

記事本狀態欄不會自動_如何在記事本中同時啟用狀態欄和自動換行

記事本狀態欄不會自動The status bar in Windows’ Notepad displays the current line number and column number of the cursor location. However, if you find that the Status Bar option on the View menu is grayed out, it may be because you have Word Wrap enabled…

洛谷P2587 [ZJOI2008] 泡泡堂

題目傳送門 分析:一道策略游戲題,要求最大期望得分和最小期望得分。首先分析最大,很顯然是可以用一種類似于田忌賽馬的思維來做,將兩隊的實力按照從大到小(其實從小到大也可以)排序,然后就按照順…

極端高溫導致澳大利亞斷網

西澳大利亞首府珀斯因惡劣天氣出現了網絡連接問題, 網絡故障不是由于暴風雨或閃電引起的,而是極端高溫。本周一是珀斯有記錄以來第六熱的天,當天最高溫度達到了44.4℃。因為創紀錄的高溫,澳大利亞寬帶 服務商iiNet在當…

推薦一款采用 .NET 編寫的 反編譯到源碼工具 Reko

今天給大家介紹的是一款名叫Reko的開源反編譯工具,該工具采用C#開發,廣大研究人員可利用Reko來對機器碼進行反編譯處理。我們知道.NET 7 有了NativeAOT 的支持,采用NativeAOT 編譯的.NET程序 無法通過ILSpy 之類的傳統工具得到源碼&#xff0…

并行傳輸數據和串行傳輸數據_為什么串行數據傳輸比并行數據傳輸快?

并行傳輸數據和串行傳輸數據SATA hard drive connections are faster than older PATA hard drive connections and the same can be said for external cabling standards, but this is counter-intuitive: why wouldn’t the parallel transmission be faster? SATA硬盤驅動…

得到某月的天數

Calendar timeCalendar.getInstance(); time.clear(); time.set(Calendar.YEAR,2018);//year年 time.set(Calendar.MONTH,1);//Calendar對象默認一月為0,month月 int daytime.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數 System.out.pri…

Django09:圖書管理系統筆記/choices用法/ MTV與MVC模型/多對多三種創建方式

圖書管理系統筆記 redirect括號內可以直接寫url 也可以直接寫別名 但如果別名需要參數,必須使用reverse解析。 choices用法 使用場景:能列舉完全的數據 #使用方法:xxx_choice #1. get.xxx_display #2. 如果超出范圍,則顯示原…

業務處理速度變慢?且看IT如何成為救世主

在日常生活的方方面面,我們似乎都在期待著一種即時的便利。比如,用手機購物、訂餐、繳費、預約掛號等等。而在企業中,時間與效率可不是一種休閑福利,而是一項重要的商業功能。我們有理由期待,當今史無前例的數字革命正…

微軟讓卡塔爾世界杯踏入元宇宙

遵守前一篇公眾號文章里的承諾,昨天盆盆在視頻號里錄制了一段5分鐘左右的短視頻,講了江森自控和微軟Azure,如何幫助卡塔爾世界杯打造基于元宇宙的數字體育館。Part.1歡迎掃碼關注我的視頻號(每天更新元宇宙、云計算和數字化的短視頻)。Part.2…

洛谷——P1305 新二叉樹(新建二叉樹以及遍歷)

題目描述輸入一串二叉樹,用遍歷前序打出。 輸入輸出格式輸入格式: 第一行為二叉樹的節點數n。(n \leq 26n≤26) 后面n行,每一個字母為節點,后兩個字母分別為其左右兒子。 空節點用*表示 輸出格式: 前序排列的二叉樹 輸…

插槽1單通道插槽2雙通道_相機雙存儲卡插槽有什么大不了的?

插槽1單通道插槽2雙通道If you paid any attention to the launch of Canon and Nikon’s first full frame mirrorless cameras—the EOS R, Z6, and Z7— you’d have noticed that some people were pretty unhappy that they only came with a single card slot—an SD slo…

python 垃圾回收詳解

原文:https://zhuanlan.zhihu.com/p/31150408 總綱策略和垃圾回收系統工作內容引用計數詳解標記-清除分代收集循環引用編程應用-常見方法ex 過程詳解使用建議觸發機制參考文獻Python垃圾回收機制--完美講解(Python vs Ruby)Python垃圾回收機制…

Django10:Ajax介紹/發送數據/SweetAlert

Ajax 異步提交 局部刷新 發送方式 1. 瀏覽器輸入url,按enter get 2.a標簽href屬性 get 3.form表單 get/post 4. ajax get/post ajax 不是編程語言&#xf…

物聯網數據終端演進之道

智能手機的普及在最近幾年掀起了一股取代企業數據終端的風潮,但正如筆者在一年前便提到過 的,“智能手機難以在企業級應用中得以普及”,這種觀點最好的佐證便是時至今日,由于安全性與管理合規的需要,個人計算機用于企業…

mac 不能連接wi-fi_如何阻止Mac自動連接到Wi-Fi網絡

mac 不能連接wi-fiYour Mac automatically reconnects to Wi-Fi networks you’ve previously connected to. Starting with macOS High Sierra, you can now tell your Mac not to automatically connect to certain Wi-FI networks. Your Mac will remember the Wi-Fi networ…

“玩轉課堂”基本構想

1、項目背景隨著互聯網科技的高速發展,人們的生活、學習和工作中的許多事情都可以借助互聯網來完成,并且反響良好。作為學生,我們切身體會到,能夠使用網絡平臺來進行學習可以節約時間、并且十分方便;而在老師的角度&am…