Python全棧Web(Django框架、模型中的CRUD)
模型中的CRUD
增加資料:
1.Entry.objects.create(屬性1=值, 屬性2=值,…)
返回值:
建立好的模型物件
def add_views(request):
# 三種增加方式
# 1.Entry.objects.create()
obj = Author.objects.create(name="Paris", age=18, email="wei8023@gmail.com")
print(obj.id, obj.name, obj.age, obj.email)
2.建立一個Entry物件 並通過save() 進行儲存
obj = Entry(屬性1=值1, ..)
obj.屬性 = 值
obj.save()
沒有返回值 儲存成功後obj會被重新賦值
# 2.obj.save()
obj = Author(name="王大錘", age=32, email="laowang@email.com")
obj.save()
print(obj.id, obj.name, obj.age, obj.email)
3.使用字典構建成物件 並通過save()儲存
dic = {
“屬性1”: “值1”
…
}
obj = Entry(**dic)
obj.save()
# 3. obj.save()
dic = {
"name": "wangdacui",
"age": 33,
"email": "wang@qq.com",
}
obj = Author(**dic)
obj.save()
print(obj.id, obj.name, obj.age, obj.email)
return HttpResponse("OK")
查詢資料:
所有的查詢 通過Entry.objects 呼叫查詢介面函式
Entry.objects.filter()
所有的查詢介面 都可以通過一個query屬性來得到對應的sql語句
Entry.objects.filter().query
基本查詢操作:
all()
Entry.objects.all()
返回queryset(查詢結果集,是一個封裝了若干個物件的列表)
def query_views(request):
# all() 查詢所有Author實體中所用的資料
authors = Author.objects.all()
print(authors.query)
print(authors)
# 迴圈遍歷authors得到每一個資料
for author in authors:
print(author.id, author.name, author.email)
查詢返回指定列:
values()|values(“欄位1”, “欄位2″…)
Entry.objects.values()
Entry.objects.values(“name”, “age”)
查詢一個queryset中的部分列 並風封裝成字典 再放到列表中
也允許將values放在其返回查詢結果集的後面
# 查詢部分列
names = Author.objects.values("name")
for name in names:
print(name["name"])
print(names)
# 在查詢所有結果的基礎上進行篩選
names = Author.objects.all().values("name")
for name in names:
print(name["name"])
查詢返回指定列:
values_list()
將結果封裝到元祖中在封裝到列表中返回
用法同values
# 將查詢結果封裝到元組再封裝到列表中
authors = Author.objects.values_list()
for author in authors:
print(author[0], author[2])
只查詢一條資料:
get(條件)
查詢只返回一條資料
Entry.objects.get(條件)
如果查詢結果為空或者查詢結果不是一條記錄都會拋異常
# 只查詢一條資料
author = Author.objects.get(id=1)
print(author)
查詢部分行資料:
filter(條件1, 條件2,…)
Entry.objects.filter(條件)
使用逗號隔開表示使用and連結方式查詢
Author.objects.filter(id=1, name=”Paris”)
# filter根據條件篩選
authors = Author.objects.filter(id=1)
print(authors.query)
print(authors)
# and方式查詢
author = Author.objects.filter(id=2, name="Paris").values()
print(author)
在條件查詢中 Django提供了若干個查詢謂詞(Field Looups)
可以完成非等值條件的查詢
Entry.objects.filter(屬性__查詢謂詞=值)
所有支援條件查詢的地方都可以寫謂詞
filter(),get(),exclude()
# 查詢所有age大於30的author資訊
authors = Author.objects.filter(age__gt=30).values()
print(authors)
# 查詢所有姓王的author資訊
authors = Author.objects.filter(name__startswith="王").values()
print(authors)
# 查詢所有email中包含wang的author資訊
authors = Author.objects.filter(email__contains="wang")
print(authors)
對條件去反:
exclude(條件)
對現有條件進行取反操作查詢
Entry.objects.exclude(條件)
# 對條件取反操作 查詢年齡小於30的
author = Author.objects.exclude(age__gt=30).valuea()
聚合查詢(無分組):
aggregate()
Entry.objects.all().aggregate(名=聚合函式(“欄位”)
集合函式:
Avg() 平均值
Count() 數量
Sum() 求和
Min() 求最小
Max() 求最大
# 聚合函式
result = Author.objects.all().aggregate(avg=Avg("age"))
print(result)
聚合查詢(有分組)
annotate()
Entry.objects.all().values(“欄位1”, …).annotate(欄位=聚合函式()).values(`欄位1`…)
第一個values是用於做聚合分組 第二個是具體篩選的值
# 分組聚合
result = Author.objects.values("isActive").annotate(sum=Sum("age")).filter(isActive=True).all()
print(result)
排序查詢:
order_by()
Entry.objects.order_by(“欄位1”, “欄位2”)
預設升序 以列1進行排序 如果列1出現重複以列2進行排序
降序排序在列明前加”-“號
# 排序查詢
result = Author.objects.order_by("-id")
for re in result:
print(re)
修改單個實體:
1.查
通過get()得到要修改的實體物件
2.改
通過物件的屬性來修改物件的值
3.儲存
通過物件的save()儲存會資料庫
def update1_views(request):
# # 修改ID為2 的author資訊
au = Author.objects.get(id=2)
au.age = 33
au.email = "baidu@163.com"
au.isActive = False
au.save()
批量修改:
呼叫 QuerySet的update(屬性=值, 屬性=值) 實現批量修改
# 將isActive為False的資料 全部改為True
Author.objects.filter(isActive=False).update(isActive=True)
刪除:
呼叫實體物件或查詢結果集的delete()就可以刪除
# 刪除
author = Author.objects.get(id=1)
author.delete()
author = Author.objects.filter(name="Paris")
author.delete()
一般情況下很少有刪除都是利用改變某個欄位的狀態來達到刪除的效果
author = Author.objects.get(id=id)
# 通過修改狀態模擬刪除
author.isActive = False
author.save()
django轉發與重定向的區別 轉發:相當只有一個路由最終的結果是由一個檢視函式處理
另一個檢視只是做了一個呼叫另個函式的作用
重定向是訪問 兩個路由 分別由兩個檢視進行處理
轉發不會改變url 只有一個請求 重定向會改變url 有兩次請求
# 轉發
# return query_all_views(request)
# 重定向
# return HttpResponseRedirect("/query_all")
return redirect("/query_all")
相關文章
- Python全棧Web(Django框架、模板)Python全棧WebDjango框架
- Python全棧Web(Flask框架、多表關聯)Python全棧WebFlask框架
- python中web開發框架Django的學習PythonWeb框架Django
- Python之Web框架DjangoPythonWeb框架Django
- Django + DebugToolbar構建全棧WEB開發Django全棧Web
- Python 中的 web 常見框架(Django 專案1)PythonWeb框架Django
- 固執己見的全棧web框架 — Redwood全棧Web框架
- Python全棧Web(Ajax概述建立)Python全棧Web
- Python全棧工程師學習筆記|Django框架介紹與安裝Python全棧工程師筆記Django框架
- Python全棧Web(HTML標籤大全)Python全棧WebHTML
- python django中restful框架的使用PythonDjangoREST框架
- LOVEPHP-WEB全棧開源框架釋出PHPWeb全棧框架
- Python全棧Web(JavaScript函式、陣列)Python全棧WebJavaScript函式陣列
- Python全棧Web(定位佈局、定位方式)Python全棧Web
- 分分鐘教你Python Web開發框架DjangoPythonWeb框架Django
- python全棧Python全棧
- Python框架DjangoPython框架Django
- Django框架之模型層Django框架模型
- Python全棧Web(AjaxJQuery-AJAX跨域請求)Python全棧WebjQuery跨域
- 後端渲染:基於Deno的全新全棧Web框架Fresh介紹後端全棧Web框架
- Django Web框架/Python框架-李強強-專題視訊課程DjangoWeb框架Python
- Python中Django是什麼?Django框架優點有哪些?PythonDjango框架
- wsgiref模組、web框架、django框架簡介Web框架Django
- 如何才能成為一名Python web全棧工程師?PythonWeb全棧工程師
- python web框架的整理PythonWeb框架
- Web全棧20201128-js的dom操作1Web全棧JS
- Python Web 框架 Django 如何使用jwt獲取使用者資訊PythonWeb框架DjangoJWT
- Meteor:全棧JavaScript開發框架的先驅全棧JavaScript框架
- Web全棧開發有前途嗎?Web全棧
- Django web框架-----url path name詳解DjangoWeb框架
- Python全棧指什麼?全棧工程師的意義是什麼?Python全棧工程師
- 前端全棧必會node框架koa。。。前端全棧框架
- Python開發中,為什麼Django框架很重要?PythonDjango框架
- HelloDjango 啟動!免費帶你學Django全棧!Django全棧
- Django中如何建立模型?Django模型
- Python 全棧系列44 - pymongo的基本使用Python全棧Go
- Web3 全棧開發完整指南Web全棧
- Django模型中的save方法 精講Django模型