Django---DjangoORM操作數據庫(增刪改查)


前面介紹了Django如何連接數據庫,也介紹了Django添加數據到數據庫,既然提到了數據庫,肯定離不開增刪改查,今天通過實例介紹下如何通過ORM操作數據庫

展示數據

舉個例子,把前面的用戶表的數據全部都展示出來,然后我們通過這個對這個數據表進行增刪改查

1、首先在views.py文件中,添加讀取數據庫內容的函數

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 查看數據
def user_list(request):
    # 查詢數據庫用戶數據
    user_ret = models.User.objects.all()
    # 返回給前端頁面   
    return render(request ,'user_list.html',{'user':user_ret})

2、在urls.py文件中,創建請求路徑

from django.contrib import admin
from django.conf.urls import url
from django.urls import path
from Anjing import views

urlpatterns = [
    path('user_list/', views.user_list),    # 展示
]

3、創建一個user_list.html文件

# user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            </tr>
    {% endfor %}
</center>
</body>
</html>

啟動Django http://127.0.0.1:8000/user_list/查看列表顯示

新增數據

新增數據應該不用說了吧,前面寫的登錄案例Django---Django注冊登錄數據保存數據庫,也可以通過在展示頁面新加一個入口新增一條數據

1、修改user_list.html文件, <a href="/add_user/">添加用戶</a><br /> 加入一個新增入口

# user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<a href="/add_user/">添加用戶</a><br />
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            </tr>
    {% endfor %}
</center>
</body>
</html>

2、views.py加入新增數據的函數,判斷下如果重復提示用戶名已重復

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 新增數據
def add_user(request):
    error_name = ''
    if request.method == 'POST':
    # 1、獲取前端輸入的數據
        user = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        user_list = models.User.objects.filter(username=user)
         # 2、判斷數據庫是否存在
        if user_list :
                error_name = '%s用戶名已經存在了' % user
                return  render(request,'add_user.html',{'error_name':error_name})
        # 3、存儲到數據庫中
        else:
            user = models.User.objects.create(username=user,
                                       password=password,
                                       email=email)
            user.save()
            return redirect('/user_list/')
    return render(request, 'add_user.html')

3、urls.py文件中加入新增跳轉路徑

# utls.py

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展示
    path('add_user/', views.add_user),    # 新增
]

4、新建一個add_user.html文件

添加完成后成功跳轉到user_list.html頁面並展示出來

# add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新增頁面</title>
</head>
<body>
 <form action="/add_user/" method="post">
        {% csrf_token %}
        <p style="text-align:center">用戶:<input type="text" name="username" /></p>
        <p style="text-align:center">郵箱:<input type="text" name="email"/> </p>
        <p style="text-align:center">密碼:<input type="password" name="password"/></p>
        <p style="text-align:center"><input type="submit" value="提交" />
        <p style="color: red;text-align: center">{{ error_name }}</p>
</form>
</body>
</html>

5、啟動Django,新增數據

首先創建一個已經存在的數據,會自動提示,新增新數據,則新增成功並展示出來

 

 

 

刪除數據

如果想要刪除一條數據的話,可以通過在展示頁面加入一個操作框,然后點擊刪除,數據就會自動刪除

1、修改user_list.html文件,加入操作欄  <th>操作</th> ,和刪除按鈕 <td><a href="/delete_user/?id={{ i.id }}">刪除</a> 

# user_list.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<a href="/add_user/">添加用戶</a><br />
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            <td><a href="/delete_user/?id={{ i.id }}">刪除</a></td>
            </tr>
    {% endfor %}
</center>
</body>
</html>

2、views.py文件中新增一個刪除函數,刪除數據庫信息

刪除數據,需要拿到數據的一個值,這里安靜取了不會變得id值,通過id來進行刪除

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 刪除數據
def delete_user(request):
    # 取出需要刪除的id
    delete_id = request.GET.get('id')
    # 從數據庫刪除的
    models.User.objects.filter(id=delete_id).delete()
    return redirect('/user_list/')

3、urls.py文件中加入刪除路徑

這個地方雖然不需要添加html,但是要增加上路徑,不然請求就會報錯

# urls.py

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展示
    path('add_user/', views.add_user),    # 新增
    path('delete_user/', views.delete_user),    # 刪除
]

4、啟動Django,刪除數據

點擊刪除按鈕,發現數據庫已經刪除完成

 

 

修改數據

這里修改數據安靜絕對先寫個簡單的修改密碼的方法,先在展示頁面添加一個修改密碼的按鈕,點擊跳轉到修改密碼的頁面,然后進行修改,修改完成后跳轉到展示頁面

1、修改user_list.html頁面,添加一個修改密碼的按鈕 <td><a href="/update_user/?id={{ i.id }}">修改密碼</a>  

# user_list.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<a href="/add_user/">添加用戶</a><br />
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            <td><a href="/delete_user/?id={{ i.id }}">刪除</a>
            <a href="/update_user/?id={{ i.id }}">修改密碼</a></td>
 </tr> {% endfor %} </center> </body> </html>

2、views.py中新增一個修改函數

這里修改密碼沒有做任何的判斷,只是單純的修改信息,后面會加上修改密碼的案例

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 修改數據
def update_user(request):
    update_id = request.GET.get('id')
    if request.method == 'POST':
        new_pwd = request.POST.get('password')
        # 找到匹配的id
        update_obj = models.User.objects.get(id=update_id)
        # 取出密碼和新密碼對應
        update_obj.password = new_pwd
        # 保存數據庫
        update_obj.save()
        return redirect('/user_list/')
    ret = models.User.objects.get(id=update_id)
    return render(request, 'update_user.html', {'ret': ret})

3、urls.py文件中加入修改密碼的路徑

# urls.py文件

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展示
    path('add_user/', views.add_user),    # 新增
    path('delete_user/', views.delete_user),    # 刪除
    path('update_user/', views.update_user),    # 修改
]

4、新增一個update_user.html文件。

通過唯一不變的id進行判斷去的哪一個值,然后進行修改,保存在數據庫

# update_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改信息</title>
</head>
<body>
<center>
<h1>修改密碼</h1>
<form action="/update_user/?id={{ ret.id }}" method="post">
    {% csrf_token %}
    密碼:<input type="text" name="password" value="{{ ret.password }}">
    <input type="submit">
</center>
</body>
</html>

5、啟動Django,修改密碼,查看數據信息

 

總結

這里主要通過一個小的例子想讓大家很清楚的看到頁面和代碼中的一些變化,幫助大家加深印象

總結下ORM數據庫增刪改查語句

增加數據:

# 新增數據
user = models.類名.objects.create(列表名1=XXX,
                                       列表名2=xxxx,
                                      xxxx=xxxx)
# 保存

user.save()

刪除數據:

# 刪除數據

models.類名.objects.filter(列表名=列值).delete()

修改數據:

# 修改數據

obj = 類名.objects.get(id='')    # 找到想要修改的那條數據

obj.name = '新值'     # 修改的那個值

obj.save()     # 保存

查詢數據:

# 查詢數據

類名..objects.all()    # 查詢全部數據

類名.objects.filter(列名=‘XXXX’)  # 過濾條件查詢

類名.objects.get(列表='XXX')      # 直接取數據

 

 =========

 

轉載自:https://www.cnblogs.com/qican/p/12505967.html

 

根據本文自己嘗試的github地址:https://github.com/huangdan92/djangoProject


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM