日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

djang-模型层(model)--添加,查询,修改

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 djang-模型层(model)--添加,查询,修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇帶大家簡單做了一下圖書表的創建、簡單的查看和刪除,今天會先簡單介紹添加和修改,因為添加和修改與刪除一樣都很簡單,本篇會相對多介紹一點單表查詢,大家都知道數據庫中查詢是最重要的一部分,畢竟無論是修改還是刪除等很多操作都是建立在查數據的基礎上。

?

本篇導航:

  • 添加
  • 單表查詢
  • 修改

?

今天所有例子用的延續上篇的數據庫,book表也是延續上篇,接著昨天的建表,刪除等功能擴展其他功能,所以有所疑問的可以先看上篇隨筆:

http://www.cnblogs.com/liluning/p/7729607.html

?

一、添加

1、添加表記錄

1)方式一

book_obj = models.Book(nid=nid,title=title,author=author,publishDate=publishDate,price=price) book_obj.save() # 將數據保存到數據庫

2)方式二

#book_obj可以得到返回值 book_obj=models.Book.objects.create(title=title,author=author,publishDate=publishDate,price=price)

2、template模版

1)首頁的添加按鈕

<a href="/addBook/"><button class="btn btn-primary">添加書籍</button></a>

2)添加頁面的提交表單

<form action="/add/" method="post"> {% csrf_token %} <tr> <td><input type="text" name="title"></td> <td><input type="text" name="author"></td> <td><input type="date" name="publishDate"></td> <td><input type="text" name="price"></td> <td> <button class="btn btn-info">提交</button> </td> </tr> </form>

{% csrf_token %}之前說過 安全機制 在post請求中使用

3、url 分發

url(r'^add/', views.addBook),

4、視圖函數views

def addBook(request) :if request.method == "POST" : nid = request.POST.get("nid") title = request.POST.get("title") author = request.POST.get("author") publishDate = request.POST.get("publishDate") price = request.POST.get("price") # book_obj = models.Book(title=title,author=author,publishDate=publishDate,price=price) # book_obj.save() # 將數據保存到數據庫 book_obj = models.Book.objects.create(title=title, author=author, publishDate=publishDate, price=price) return redirect("/index/") return render(request, "add.html")

先講拿到表單提交的數據 然后添加到表

添加表用那一個方式都可以 推薦方式二


?

二、單表查詢

1、查詢相關API

一定區分object與querySet的區別

?

復制代碼昨天已做介紹: <1> all(): <2> filter():<3> get(): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。(慎用) <4> exclude(): 它包含了與所給篩選條件不匹配的對象 <5> values(): 返回一個ValueQuerySet——一個特殊的QuerySet,運行后得到的并不是一系列model的實例化對象,而是一個可迭代的字典序列 <6> values_list(): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列 <7> order_by(): 對查詢結果排序 <8> reverse(): 對查詢結果反向排序 <9> distinct(): 從返回結果中剔除重復紀錄 <10> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。 <11> first(): 返回第一條記錄 <12> last(): 返回最后一條記錄 <13> exists(): 如果QuerySet包含數據,就返回True,否則返回False

?

?

?

例如: <2>filter(nid=nid,title=title) ','可以起到數據庫and的作用兩個條件關系為且,在括號里并不能實現‘或’的條件關系,后面的隨筆會隨后一一介紹。?

2、雙下劃線之單表查詢

1 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 獲取id大于1 且 小于10的值 #__lte,__gte 小于等于 大于等于 2 models.Tb1.objects.filter(id__in=[11, 22, 33]) # 獲取id等于11、22、33的數據 3 models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in 4 models.Tb1.objects.filter(name__contains="ven") #模糊查詢 5 models.Tb1.objects.filter(name__icontains="ven") # icontains大小寫不敏感 6 models.Tb1.objects.filter(id__range=[1, 2]) # 范圍bettwen and 7 startswith,istartswith, endswith, iendswith

3、通過logging可以查看翻譯成的sql語句

LOGGING = {'version': 1,'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } } 

將上面代碼粘貼到setting配置文件里,當你的操作與數據庫相關時 會將我們的寫的語句翻譯成sql語句在服務端打印。

4、以下代碼只為測試sql語句和單表查詢示例

1)url 分發

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

2)視圖函數views

def query(request):# 查詢方法API:# 1 all: models.表名.objects.all() # book_all = models.Book.objects.all() # 結果是querySet集合 [model對象,....] # print(book_all) # <QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]> # 2 filter: models.表名.objects.filter() # 結果是querySet集合 [model對象,....] # ret1=models.Book.objects.filter(author="yuan") # # <QuerySet [<Book: 追風箏的人>, <Book: asd>]> # ret2=models.Book.objects.filter(nid=1) # <QuerySet [<Book: yuan>]> # ret2=models.Book.objects.filter(author="yuan",price=123) # <QuerySet [<Book: yuan>]> # print(ret2) # 3 get models.表名.objects.get() # model對象 # ret3=models.Book.objects.get(author="yuan") # print(ret3.price) # exclude : 排除條件 # ret4=models.Book.objects.exclude(author="yuan") # print(ret4) # values方法 # ret=models.Book.objects.filter(author="yuan").values("title","price") # print(ret)# <QuerySet [{'title': '追風箏的人', 'price': Decimal('99.00')}, {'title': 'asd', 'price': Decimal('123.00')}]> # ret = models.Book.objects.filter(author="yuan").values_list("title", "price") # print(ret) # <QuerySet [('追風箏的人', Decimal('99.00')), ('asd', Decimal('123.00'))]> # ret=models.Book.objects.filter(author="yuan").values("author").distinct() # print(ret) # count方法 # ret=models.Book.objects.filter(author="yuan").count() # print(ret) # first 方法 ret = models.Book.objects.all().first() print(ret) # exists方法 # if models.Book.objects.all().exists(): # print("exists") # else: # print("nothing") # ret = models.Book.objects.filter(price__gt=100) # ret = models.Book.objects.filter(price__gte=99) # 大于等于 # ret=models.Book.objects.filter(publishDate__year=2017,publishDate__month=10) # ret=models.Book.objects.filter(author__startswith="張") # print(ret) return HttpResponse("OK")

以 first 方法為例

從此處可以看出我們雖然在操作數據庫時沒有寫sql語句,但是django將我們寫的語句翻譯成了sql語句


?

三、修改

1、修改表記錄

修改表記錄和添加表記錄同樣都有兩個方法,我們在視圖函數views里看修改表記錄的具體應用

nid = request.POST.get("nid") title=request.POST.get("title") author=request.POST.get("author") publishDate=request.POST.get("publishDate") price=request.POST.get("price") # 修改方式1:save(效率低) # book_obj=models.Book.objects.filter(nid=id)[0] # 修改書名示例: # book_obj.title="py2" # book_obj.save() # 修改方式2:(推薦) models.Book.objects.filter(nid=nid).update(title=title,author=author,publishDate=publishDate,price=price) return redirect("/index/")

2、url 分發

url(r'^edit/(\d+)', views.editBook),

3、template模版

1)主頁修改按鈕

<a href="/edit/{{ book_obj.nid }}"><button class="btn btn-info">編輯</button></a>

2)數據來源和添加表數據相同 由template模版的form表單提交 不同的是修改的表單內需要默認原來的數據

<form action="/edit/{{ edit_obj.nid }}" method="post"> {% csrf_token %} <tr> <td>{{ forloop.counter}}<input type="hidden" name="nid" value="{{ edit_obj.nid }}"></td> <td><input type="text" name="title" value="{{ edit_obj.title }}"></td> <td><input type="text" name="author" value="{{ edit_obj.author }}"></td> <td><input type="date" name="publishDate" value="{{ edit_obj.publishDate|date:"Y-m-d" }}"></td> <td><input type="text" name="price" value="{{ edit_obj.price }}"></td> <td> <a href="/del/{{ edit_obj.nid }}"><input type="button" class="btn btn-danger" value="刪除"></a> <button class="btn btn-success">保存</button> </td> </tr> </form>

轉載于:https://www.cnblogs.com/52forjie/p/7825239.html

總結

以上是生活随笔為你收集整理的djang-模型层(model)--添加,查询,修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。