您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Django框架如何操作增刪改查,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Django之orm對MysqL數據庫的增刪改查操作簡介:
利用Django中orm來查找數據庫中的數據,對數據庫進行增、刪、改、查:
增:
新增數據 # 操作數據庫user表新增記錄 # 方式1: user_obj = models.User.objects.create(name=username,password=password) # 方式2: user_obj = models.User(name=username,password=password) user_obj.save() # 對象調用save方法保存到數據庫
查:
user_list = models.User.objects.all() # 獲取user表所有的數據(QuerySet對象) # 只要是QuerySet就可以點query查看獲取到當前QuerySet對象的內部sql語句 user_obj = models.User.objects.all().first() #從上面所有數據的QuerySet對象中取出第一個用戶對象 user_list = models.User.objects.filter(password=555) # filter過濾,查找條件password=555的所有用戶數據,返回結果user_list為QuerySet對象(裝有查詢到的全部用戶數據對象的一 個容器) user_obj = models.User.objects.filter(password=555).first() # 取出剛才容器中的第一個用戶數據對象。
Tips:除了用filter定位表記錄的方法,還可以使用.get()方法:
user_obj = models.User.objects.get(password='555') 這樣查會報錯:get() returned more than one User -- it returned 2! 原因:用get方法是直接獲取單數據對象本身,報錯的原因在于根據password='555'查詢的數據是2個結果,那么就不是單個數據對象, 所以就報錯了! 強調:用get方法查詢條件不存在的時候會直接報錯。 所以:不推薦使用get,推薦使用filter查詢,就算條件不存在,會返回一個空的QuerySet對象 (<QuerySet []> <class 'django.db.models.query.QuerySet'>)
這里引入一個小點:將查詢到的的所有表記錄傳給html文件,進行頁面渲染之后展現(xiàn)給用戶。
templates文件夾內創(chuàng)建user_list.html文件:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <div> <div> <h2>用戶數據表</h2> <div class="col-md-8 col-md-offset-2"> <table class="table-hover table-bordered table-striped table"> <thead> <tr> <th>ID</th> <th>name</th> <th>password</th> </tr> </thead> <tbody> {% for user_obj in user_list %} <tr> <td>{{ user_obj.pk }}</td> <td>{{ user_obj.name }}</td> <td>{{ user_obj.password }}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
創(chuàng)建一個展示用戶數據的url路徑:
my_Dproject/my_Dproject/urls.py中添加:
url(r'^user_list/', views.user_list)
創(chuàng)建路徑函數:
my_Dproject/app01/views.py中加函數:
def user_list(request): user_list = models.User.objects.all() return render(request, 'user_list.html', {"user_list": user_list})
后面的字典還可以替換成locals(),代表函數內所有變量我當做參數傳進前面的html文件中,進行動態(tài)頁面渲染:
return render(request, 'user_list.html', locals())
開啟my_Dproject項目,在瀏覽器輸入url:http://127.0.0.1:8000/user_list/
這就是剛才我們通過增的操作,創(chuàng)建的user表和表中的2條記錄。
改:
首先需要明白一點:改是建立在已經查到的數據基礎上修改對應字段值的,所以改的前提必須有一個查的過程:
鎖定單個表記錄,用filter:
user_obj = models.User.objects.filter(id=edit_id).first()# 再次強調如果不加.first(),返回的結果是一個QuerySet對象,而 不是用戶數據對象 改: 方式一: models.User.objects.filter(id=edit_id).upadte(name='banana', password='666') 注意:方式一update修改的數據可能不是一條記錄,有可能把查詢到的多條記錄的name和password的值全部改成banana和666,類似 于批量操作。 當然如果能確定filter對象的唯一性比如條件為primary_key的id那么查找的數據肯定是一條記錄,這樣也可看作單個記錄修改。 方式二: user_obj = models.User.objects.filter(id=edit_id).first()user_obj.name = 'banana'user_obj.name = '666'user_obj.save()
編輯對象獲取方式:
我們在表記錄修改的時候一般都是需要獲取到該條表記錄的主鍵id值,這樣就能精確定位修改該條記錄了。所以需要一些手段來傳遞id值:
編輯對象的id的獲取方式
方式1:
利用input隱藏一個標簽
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式2:
form表單中加入GET請求數據,在views函數方法中通過request.GET.get(edit_id)來獲取需要修改的id。
(雖然請求方式是POST,但可以在標簽內加入GET請求參數,在views函數中能夠同時通過request.POST和request.GET方法拿到不同
的數據)
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post">
刪:
刪除和修改方法類似:
方法一:
models.User.objects.filter(password='555').delete() # 會將queryset所有的數據對象全部刪除
方法二:
user_obj = models.User.objects.filter(password='555').first() user_obj.delete()
最后補充一張Web框架實現(xiàn)的最基礎的流程圖:
以上就是Django框架如何操作增刪改查,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。