django 過濾器-查詢集-比較運算符-FQ對象-mysql的命令視窗

来源:https://www.cnblogs.com/zmdComeOn/archive/2020/01/09/12173485.html
-Advertisement-
Play Games

""" 返回查詢集的方法稱為過濾器 all() 返回查詢集中所有數據 filter() 返回符合條件的數據 一、filter(鍵=值) 二、filter(鍵=值,鍵=值) #兩個關係為and 三、filter(鍵=值).filter(鍵=值) #兩個關係為and exclude()過濾掉符合邏輯的數 ...


"""
返回查詢集的方法稱為過濾器
all()
返回查詢集中所有數據
filter() 返回符合條件的數據
一、filter(鍵=值)
二、filter(鍵=值,鍵=值)   #兩個關係為and
三、filter(鍵=值).filter(鍵=值)   #兩個關係為and
exclude()過濾掉符合邏輯的數據
order_by()排序
values()一條數據就是一個對象{字典},返回一個列表

返回單個數據:
get() 返回一個滿足條件的對象
註意:如果沒有找到符合條件對象,會引發“模型類.DoesNotExist異常”
     如果找到多個對象,也會引發“模型類.MultipleObjectsReturnen異常"
count()  返回查詢集中的對象個數
first()  返回查詢集中的第一個對象
last()   返回查詢集中的最後一個對象
exists()  判斷查詢集中是否有數據,如果有返回True,沒有返回False

限制查詢集 返回列表,可以使用下標的方法進行限制,註意下標不能是負數
students_list = Students.stuobj.all()[0:5]  這個是顯示5條記錄
下麵是分頁顯示5條記錄
#0-5 6-10
# 1   2
page = int(page)
students_list = Students.stuobj.all()[(page-1)*5:page*5]

查詢集的緩存
概述:每個查詢集都包含一個緩存,來最小化對數據加訪問
    在新建的查詢集中,緩存首次為空,第一次對查詢集求值,會發生數據緩存,django會將查詢出來的數據做一個緩存,並返回查詢結構,以後查詢的直接查詢查詢集的緩存

欄位查詢
概述
1.實現了SQL中的WHERE語句,作為方法filter(),exclude(),get()參數
2.語法:屬性名稱__比較運算符=值
3.外鍵:屬性名_id
4.轉義:like語句在SQL中使用%是為了匹配點位,匹配數據中的%(where like ‘\%‘)
filter(sanme__contains‘%‘)


比較運算符:
exact:判斷,大小寫區分,例:filter(isdelete=Flase)
contains:包含,大小寫區分,例:students_list=Students.stuobj.filter(sname__contains="小")
startswith和endswith:以values開頭或者結尾的查詢,大小寫區分,例:students_list=Students.stuobj.filter(sname__startswith="小")
以上四個開頭加上i,就不區分大小寫,iexact,icontains,istartswiht,iendswith
isnull,isnotnull:是否為空的意思,例:filter(sname_isnull=False)
in:是否包含在範圍內,例:students_list=Students.stuobj.filter(pk__in=[2,4,6])
gt,gte,it,ite:分別為,大於,大於等於,小於,小於等於,例:students_list=Students.stuobj.filter(sage__gt=30)
year,month,day,week_day,hour,minute,second:日期篩選,例:students_list=Students.stuobj.filter(latetime__year=2017)

跨關聯查詢:
處理join查詢,語法:模型類名__屬性名__比較運算符
描述中帶有"小李"這兩個字的數據是屬於那個班級的
students_list = Grades.gra_guanli.filter(students__scontend__contains=‘小李‘)
print(students_list)

查詢快捷:
pk  ---  代表主鍵

聚合函數:
使用aggregate()函數返回聚合函數的值
Aug
Count
Max
Min
Sum
使用時候,需要先引入,例,取最大的年齡:
from django.db.models import Max
studentAge = Students.stuobj.aggregate(Max(‘sage‘))
print studentAge
列印結果:{‘sage__max‘: 34}  #是個字典


F對象:
可以使用模型A屬性與B屬性進行比較
也是需要先引入
from django.db.models import F
def grades3(request):
    g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘))
    print(g)
    return HttpResponse("kkk")
支持F對象的算術運算
    g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘)+20)


Q對象:
概述:過濾器的方法中的關鍵字參數,條件為AND模式
需求:進行or查詢
解決:使用Q對象,這個是或的關係,只兩個條件有一個符合都會顯示
from django.db.models import Q
def studentsearch(request):
    g = Students.stuobj.filter(Q(pk__gt=7) | Q(sage__gt=30))
    print (g)
    return HttpResponse(‘jj‘)
如果只有一個Q對象,就是用於匹配
g = Students.stuobj.filter(Q(pk__gt=7))
如果Q對象前面再個波浪線,就是用於取反
g = Students.stuobj.filter(~Q(pk__gt=7))











如果更改django的代碼,終端需要重新進入,並重新載入下麵,終端區分大小寫

from xinapp.models import Grades,Students
from django.utils import timezone
from datetime import *

查所有數據  類名.objects.all()

給表傳數據
grade1 = Grades()
grade1.gname = "pingguo"
grade1.gdate = datetime(year=2017,month=7,day=17)
grade1.ggirlnum = 8
grade1.gboynum = 30
grade1.save()
.....

查詢數據某一個數據
類名.objects.get(pk=num)
Grades.objects.get(pk = 2) #相當於id = 2

修改某一個表的數據
模型對象.屬性=新值
grade1.gboynum =80
grade1.save()

刪除某個表的數據
模型對象.delete()
物理刪除(資料庫中表的數據真實被刪除)
grade2.delete()

關聯外鍵(註意,表中的欄位都必須賦值才能正常保存,否則會出錯)
grade1 = Grades()
grade1.gname = "ceshi"
stu = Students()
stu.sname = "ksjdfk"
stu.models.ForeignKey = grade1

獲取班級關聯的學生
模型對象名.關聯的類名小寫_set.all()
grade1.students_set.all()

通過關聯直接創建學生(如果中文需要轉碼u‘中文‘,英文不用,它會直接存入資料庫,不需要使用save())
並且直接屬於grade1的學生!
stu3 = grade1.students_set.create(sname=u‘曾志偉‘,sgender=True,scontend=‘shuoming‘,sage=77)

啟動伺服器
python manage.py runserver




mysql的命令視窗,這個是沒有區分大不小寫的

刪除除資料庫
drop database 表名; 資料庫名
創建資料庫
create database  表名; 資料庫名
展示所有資料庫名稱
show databases;
使用資料庫
use 數據名;
展示資料庫下麵的所有表名稱
show tables;
展示表的所有欄位結構
desc 項目_表名
查詢表的具體的內容
select * from 表名(例:xinapp_grades);

django中資料庫基本操作:
1.同步資料庫
python manage.py makemigrations  #生成migrations
python manage.py migrate   #應用migrations
2.增
Model.objects.create(**kwargs)
3.查
Model.objects.all()
4.改
m = Model.objects.get(id=1)
m.name = ‘new_name‘
m.save()
5.刪
m = Model.objects.get(id=1)
m.delete()
3.資料庫的基本操作
3.1 增
我們先為shopping mall增加一個化妝品區:
複製代碼
from django.shortcuts import HttpResponse
from .models import Area
def add_area(request):
    area = Area.objects.create(name=‘cosmetic‘, description=‘充滿香味兒的區域‘)
    return HttpResponse(‘added!‘)
複製代碼
其中,第六行代碼 area = Area.objects.create(name=‘cosmetic‘, description=‘充滿香味兒的區域‘)

所對應的mysql語句為:

insert into shop_area(name,description) values(‘cosmetic‘,‘充滿香味兒的區域‘);
3.2 查

現在,我們來列出shopping mall中的所有區域:

複製代碼
1 from django.shortcuts import HttpResponse
2 from .models import Area
3
4
5 def list_area(request):
6     area = Area.objects.all()
7     print(area)                    # 在shell輸出[<Area: ‘cosmetic‘>],如果沒有定義__str__(),將輸出無意義的[<Area: Area object>]
8
9     return HttpResponse(‘listed!‘)
複製代碼
第六行代碼 area = Area.objects.all()

相當於mysql語句:

select * from shop_area;
複習一下:shop_area為django為模型自動生成的表名(app_model)
3.3 改
在3.1中,我們並沒有為化妝品區指定管理人員。現在,我們修改化妝品區的信息,將rinka指定為管理人員。

首先,我們要創建一個rinka用戶。這裡我將創建一個名為rinka的superuser:

python manage.py createsuperuser


接著,將我們創建的rinka用戶指定為化妝品區的管理人員:

複製代碼
 1 from django.shortcuts import HttpResponse
 2 from .models import Area
 3 from django.contrib.auth.models import User
 4
 5
 6 def update_area(request):
 7     rinka = User.objects.get(username=‘rinka‘)
 8     area = Area.objects.get(id=1)
 9     area.manager = rinka
10     area.save()
11
12     return HttpResponse(‘updated!‘)
複製代碼
註意必須調用對象的save()方法,對對象實例的修改才會保存到資料庫中去。這是一個容易出錯的地方。

第8~10行代碼對應的mysql語句為:

update shop_area set manager_id=1 where id=1;
複習一下:manager_id為django預設為外鍵生成的列名(foreignkey_id)
3.4刪

刪除操作很簡單,我們現在來刪除資料庫表shop_area中id為1的那行數據:
複製代碼
1 from django.shortcuts import HttpResponse
2 from .models import Area
3
4
5 def delete_area(request):
6     area = Area.objects.get(id=1)
7     area.delete()
8
9     return HttpResponse(‘deleted!‘)
複製代碼
第6~7行語句對應的mysql語句為:
delete from shop_area where id=1;

模型類中定元選項(Meta類):
db_talbe 定義數據表名,如果不定義, 預設是項目名小寫_類名小寫
ordering 取數據時顯示的順充  正數為順序,前面加負號為反序,排序會增加資料庫資源
    class Meta:
        db_table="students"
        ordering=["-id"]




"""

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題背景 在開發好頁面後,如何讓頁面更快更好的運行,是區分一個程式猿技術水平和視野的一個重要指標。所以面試時,面試官總會問你一個問題,如何進行性能優化呢? 性能優化是什麼 從前端的角度來說,性能優化可以分為兩個方向。從用戶角度來看,一個是頁面載入的很快,另一個是頁面使用起來很流暢。因此,對性能優化的 ...
  • Python真的是無所不能,原因就是因為Python有數目龐大的庫,無數的現成的輪子,讓你做很多很多應用都非常方便。wifi跟我們的生活息息相關,無處不在。今天從WiFi連接的原理,再結合代碼為大家詳細的介紹如何利用python來破解WiFi。、 ! 01.如何連接wifi 首先我們的電腦是如何連接 ...
  • 一、Spring IoC容器概述 1.依賴反轉(依賴註入):依賴對象的獲得被反轉了。 如果合作對象的引用或依賴關係的管理由具體對象來完成,會導致代碼的高度耦合和可測試性的降低,這對複雜的面向對象系統的設計是非常不利的。 在Spring中,IoC容器是實現依賴控制反轉這個模式的載體,它可以在對象生成或 ...
  • 一、概述 從前面 "文章" 中我們可以瞭解到,javac 的三個步驟中,程式員唯一能幹預的就是註解處理器部分,註解處理器類似於編譯器的插件,在這些插件裡面,可以讀取、修改、添加抽象語法樹中的任意元素。因此,只要有足夠的創意,程式員可以通過自定義插入式註解處理器來實現許多原本只能在編碼中完成的事情。我 ...
  • Java中IO的模型分為三種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO。 BIO【同步阻塞】 在JDK1.4出來之前,我們建立網路連接的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通信,預設情況下服務端需要對每個請求建 ...
  • django的model欄位在保存的時候做預處理怎麼辦? 比如這個model: class Book(Model): publish_date = DateField() 但是在保存時,用戶輸入數據是: book1 = Book(publish_date='20171001') 我希望這個publi ...
  • 簡單寫一下多對多查詢model 不是多對多的欄位我就沒寫上來的 class Tag(models.Model): name = models.CharField(max_length=20,verbose_name='標簽') add_time = models.DateField(default= ...
  • PHP+InfiniteScroll實現網頁無限滾動載入數據實例,實現原理:當滾動條到底離網頁底部一定長度的時候,向後臺發送頁數並獲取數據。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...