Django中數據知識點歸納

?

Django對象的增刪改查

我們為了對django對象的增刪改查進行總結,先在model.py文件中創建類便于舉例

定義學生:

class Students(models.Model):sname=models.CharField(max_length=20)sgender=models.BooleanField(default=True)sage=models.IntegerField()sscord=models.CharField(max_length=20)isDelete=models.BooleanField(default=False)# 這里可以添加Meta類進行對元類的重命名和排序操作class Meta:db_table=xxx  # 定義數據表名,推薦使用小寫字母ordering=[]   # 對象的默認排序字段 ,獲取對象列表時使用,通常是Integer(整數)類型,升序ordering['id'],降序用ordering['-id']

然后在url.py文件中添加一個鏈接轉到views.py文件中:

url(r'^show/',views.show)

接下來在views.py文件中進行具體的增刪改查操作
下面是一些例子:
查詢:

# 類名.objects.all()   #查詢所有對象
Students.objects.all()# 類名.object.get('條件')   #查詢單個對象
Students.object.get(sage=18)# 類名.object.filter.(條件查詢)  #模糊查詢
#查詢年齡小于等于18歲的學生信息
Student.objects.filter(age__lte=20).all()
#查詢出年齡大于等于18歲的用戶信息,但是使用的是exclude函數
Students.objects.exclude(age__gt=18).all()# 查詢結果集的數量
Students.objects.all().count()# 判斷查詢結果集是否有值
Students.objects.all().exists()# 使用切片的形式拿到前幾個值
Students.objects.all()[0:3]# 求出年齡大于學分的所有學生信息
# Student.object.filter(sage__gt=F('sscord')).all()# 求出年齡大于20,并且姓名包含e的所有信息
Students.object.filter(sage__gt=20).filter(sname__contains='e').all()

修改:

# 排序  (默認升序,降序的話屬性前面加‘-’)
Students.objects.order_by('sage')#修改
得到對應的對象
模型對象.屬性=屬性值
模型對象.save()
stu=Students.object.get(sage=18)
stu.sage=19
stu.save()

刪除:

獲得對象名
對象名.delete()
stu = Students.objects.get(pk=1)
stu.delete()

增加:

對象.save
stu=Students()
sname=jeck
sage=18
sscord=60
stu.save()
context = {'stu':stu}
return render(request,'show.html',context=context)或者直接返回
return render(request,'show.html',locals())

最后在show.py文件里展示views.py文件中的內容
show.py:

<ul>{% for i in stu %}<li>{{ i.sname }}</li>{% endfor %}
</ul>

上面只是一些大概的例子,下面進行總結:
--------------------------------------------------------------------------
ORM(Object Relational Mapping)對象關系映射,是一種程序技術,用于實現面向對象編程語言里不同類型系統的數據之間的轉換。
可以簡單理解為翻譯機,用于django與數據庫交互
Django默認通過模型的‘objects’對象實現模型數據查詢
Django有兩種過濾器用于篩選記錄:

filter	:返回符合篩選條件的數據集
exclude	:返回不符合篩選條件的數據集
多個filter 和 exclude可以連接在一起查詢

返回查詢集:

all()		:返回所有數據
filter() :返回符合條件的數據
exclude():過濾掉符合條件的數據
order_by():排序
values():一條數據就是一個字典,返回一個列表

返回單個數據:

get():返回一個滿足條件的對象,沒有找到會引發模型類.DoesNotExist異常,找到多個會引發模型類.MultiObjectsReturned異常
first():返回查詢集中的第一個對象
last():返回查詢集的最后一個對象
count():返回當前查詢集中的對象個數
exists():判斷查詢集中是否有數據,如果有返回True,反之返回False

限制查詢集和查詢集的緩存:

限制查詢集可以使用下標的方法進行限制,等同于sql中的limit
studentList=Students.objects.all()[0:5]   #下標不能是負數
查詢集的緩存:每個查詢集都有一個緩存,來最小化對數據庫的訪問
在新建的查詢集中,緩存首次為空,第一次對查詢集求值,會發生數據緩存,django會將查詢出來的數據做一個緩存,并返回查詢結構,以后查詢直接使用查詢集的緩存

過濾器filter(),exclude()以及get()的參數:

語法:屬性名稱_比較運算符=值比較運算符:
exact:判斷,大小寫敏感,	filter(isDelete=False)
contains:是否包含,大小寫敏感,	filter(sname_contains='趙')
startswith,endswith:以values開頭或結尾,大小寫敏感
在以上四個運算符前加上i(ignore)就不區分大小寫了
isnull,isnotnull:是否為空,	filter(sname_isnull=False)
in:是否包含在范圍內,filter(pk_in=[1,2,3,4])
gt,gte,lt,lte:大于,大于等于,小于,小于等于,	filter(sage_gt=30)表示時間的:
year,month,day,week_day,hour,minute,second:filter(lasttime__year=2017)
pk:代表主鍵,filter(pk=1)跨關系查詢:
模型類名__屬性名__比較運算符,實際上就是處理的數據庫中的join
grade = Grade.objects.filter(student__scontend__contains='趙錢孫')
描述中帶有'趙錢孫'這三個字的數據屬于哪個班級聚合函數:
使用aggregate()函數返回聚合函數的值
Avg:平均值
Count:數量
Max:最大
Min:最小
Sum:求和
Student.objects().aggregate(Max('sage'))

F對象:

可以使用模型的A屬性與B屬性進行比較
grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') )
F對象支持算數運算
grades = Grade.objects.filter(ggirlnum__gt=F('gboynum') +10 )

Q對象:

過濾器的方法中的關鍵參數,常用于組合條件
年齡小于25
Student.objects.filter(Q(sage__lt=25))
Q對象語法支持  | (or), & (and), ~(取反)
年齡大于等于的
Student.objects.filter(~Q(sage__lt=25))

-------------------------------------------------------
在Django中,我們有些時候使用Django自帶的ORM語句無法達到操作數據庫的效果,這時,我們可以自定義一個管理器來進行數據庫的操作。從總體上來說,就是重寫方法和自定義方法

django的隱性屬性和顯性屬性

顯性: 自己寫的那些
隱性: objects 是一個Manager類型的一個對象,作用于數據庫進行交互

自定義模型管理器作用:

可以向管理器中添加額外的方法
修改管理器返回的原始查詢集
提供創建對象的方式

不同的操作在不同的類中,如all() 在Manager類,get()在Query類中
一個例子說明自定義管理器類的作用:

通過Student.objects.all() 查詢sgender為True的記錄class Student(models.Model):sno = models.AutoField(primary_key=True)sname = models.CharField(max_length=30,null=False)sgender = models.BooleanField(default=False)objects = getAllTrue()  #創建一個自定義類對象def __str__(self):return "Student:%s--%s"%(self.sname,self.sgender)#自定義管理類
class getAllTrue(models.Manager):  #all()來自于Manager類# def all(self):      #重寫方法#     return Manager.all(self).filter(sgender = True) #功能操作def get_queryset(self):		# 與all() 方法相同,在源碼中,all()執行就是調用get_queryset()方法。return Manager.get_queryset(self).filter(sgender=True)

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

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

相關文章

面 試 細 節 一 點 通

面談的禮節是社會新人及求職者踏人社會工作前最重要且最需學習的課題&#xff0c;因為這關系到是否能順利踏入社會且尋找到一份合適滿意的工作。 一個社會新人除了應注意的面試禮節外&#xff0c;在開始進行面談之前及面談結束之后&#xff0c;還有不少必須注意的禮儀。 面談時…

寬帶與流量的關系

流量&#xff0c;一般指的是每秒鐘流經某設備的數據的多少。也就是Byte/Second( 字節每秒)。 比方說1M&#xff0c;這個概念的單位叫bPS(bit Per Second)比特每秒。而事實上經常用另外一個詞來代替描述&#xff0c;也就是帶寬。 而帶寬和流量的換算關系是&#xff1a; 1 By…

PHP函數處理方法總結

call_user_func_array (PHP 4 > 4.0.4, PHP 5, PHP 7) call_user_func_array — 調用回調函數&#xff0c;并把一個數組參數作為回調函數的參數 說明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一個參數作為回調函數&#xff08;callback&…

Django刪除多對多表關系 :

刪除多對多表關系 &#xff1a; # 刪除子表與母表關聯關系,讓小虎不喜歡任何顏色 # 寫法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 寫法2: child_obj Child.objects.get(name"apo…

git push/pull時總需要輸入用戶名密碼的解決方案

在提交項目代碼或者拉代碼的時候&#xff0c;git會讓你輸入用戶名密碼&#xff0c;解決方案&#xff1a;&#xff08;我們公司用的是gitlab&#xff09;執行git config --global credential.helper store命令然后git push origin your-branch會讓你輸入用戶名和密碼&#xff0c…

Django源代碼寫DetailView與ListView

基于類的通用視圖 - 展平索引 通用顯示視圖 以下兩個通用的基于類的視圖旨在顯示數據。在許多項目中&#xff0c;它們通常是最常用的視圖。 一、DetailView django.views.generic.detail.DetailView 在執行此視圖時&#xff0c;self.object將包含視圖正在操作的對象。 此視圖…

開源商務智能軟件Pentaho

1 簡介Pentaho是世界上最流行的開源商務智能軟件,以工作流為核心的&#xff0c;強調面向解決方案而非工具組件的&#xff0c;基于java平臺的商業智能(Business Intelligence,BI)套件BI&#xff0c;之所以說是套件是因為它包括一個web server平臺和幾個工具軟件&#xff1a;報表…

chrome用type=file獲取圖片路徑并轉base64字符串

1 html頁面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"選擇圖片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中間件 process_exception

process_exception(self, request, exception) 函數有兩個參數&#xff0c;exception 是視圖函數異常產生的 Exception 對象 process_exception 函數的執行順序是按照 settings.py 中設置的中間件的順序的倒序執行 process_exception 函數只在視圖函數中出現異常的時候才執行…

NTV Media Server G3性能測試

Hello&#xff01;大家好&#xff0c;我是資深測試工程師Jackie&#xff0c;今天我來和大家一起對云視睿博的高性能流媒體服務器NTV Media Server G3做一次性能測試。今天測試有一個小目標&#xff0c;那就是驗證在一臺普通的PC機上&#xff0c;NTV Media Server G3的并發能力是…

人生不只是上坡路

從前的自己都是非常順利的&#xff0c;覺得自己有一天一定可以成就一番事業。 可是誰也預料不到這幾年的變化&#xff0c; 似乎人生就要跌落到了谷底&#xff0c; 不知道該如何去面對&#xff0c; 壓力很大、惶恐不安、不知道未來的路該如何去走。 人生不只是上坡路&#xff0c…

Django 時間與時區設置問題

Django 時間與時區設置問題 在Django的配置文件settings.py中&#xff0c;有兩個配置參數是跟時間與時區有關的&#xff0c;分別是TIME_ZONE和USE_TZ 如果USE_TZ設置為True時&#xff0c;Django會使用系統默認設置的時區&#xff0c;即America/Chicago&#xff0c;此時的TIME_…

Oracle+ASM單機環境下,開啟歸檔的最簡單的方法

在ASM單機環境下&#xff0c;開啟歸檔的最簡單的方法。環境&#xff1a;oracle11g 11.2.0.4 登陸sqlplus[oracleudevasm ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 8 18:20:41 2017Copyright (c) 1982, 2013, Oracle. All rights reserved…

【Python】 配置解析ConfigParser 命令行參數解析optparser

ConfigParser ConfigParser包裝了配置文件的讀取和寫入&#xff0c;使得python程序可以更加輕松操作配置文件了。這里的配置文件是指.ini的那種文件&#xff0c;基本格式如下 [section_a] a_key1 a_value1 a_key2 a_value2[section_b] b_key1 b_value1 b_key2 b_value2 b_k…

解決:build_attrs() takes at most 2 arguments (3 given)

1.這個原因是由于captcha版本安裝太低引起的&#xff0c;所以導致register頁面打開報錯 2.解決辦法就是安裝更高級版本的captcha 解決pip install django-simple-captcha0.5.5

docker registry v2與harbor的搭建

docker的倉庫 1 registry的安裝 docker的倉庫我們可以使用docker自帶的registry,安裝起來很簡單&#xff0c;但是可能有點使用起來不是很方便。沒有圖形化。 開始安裝 1 使用鏡像加速器 2 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc945b6d.m…

在windows下安裝Redis

一、下載windows版本的Redis 由于官網上沒有windows版的下載地址&#xff0c;所以需要下載windows版本的Redis有以下兩個地址&#xff1a; 博主的csdn資源地址&#xff1a;http://download.csdn.net/detail/u010608551/9778240 github下載地址&#xff1a;https://github.com/M…

Django REST framework【學習內容】

快速入門 我們將創建一個簡單的允許管理員用戶查看和編輯系統中的用戶和組的API。 項目設置 創建一個名為 tutorial 的新django項目&#xff0c;然后啟動一個名為 quickstart 的新app。 # 創建項目目錄 mkdir tutorial cd tutorial# 創建一個virtualenv來隔離我們本地的包依…

DotNetCore跨平臺~發布腳本PowerShell的設計

回到目錄 這幾天對PS情有獨忠&#xff0c;被它的強大功能所希引&#xff0c;它可以快速部署&#xff0c;快速發布&#xff0c;將一些連帶的動作一次的完成&#xff0c;挺方便&#xff0c;類似于早期的bat文件&#xff0c;也像linux平臺的bash腳本&#xff0c;但功能上&#xff…

解決: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `

#注冊 def add_person(request):p_name request.POST.get("p_name")p_password request.POST.get("p_password")person_data {"p_name": p_name,"p_password": p_password,}print(person_data)serializer PersonSerializer(person…