zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android 内存泄漏原因
    Android Selector和Shape的用法
    Android 中的Activity、Window、View之间的关系
    Android Application 详细介绍
    深入理解Android异步消息处理机制
    利用图像识别技术解决非原生控件的定位问题
    一招让 IOS 自动化化快的飞起
    IOS 模拟器多开集成测试和那些坑
    利用UiWatchers 监听解决安卓自动化各种自动化各种非期待弹窗,弹层,升级,广告,对话框,来电等问题
    uiautomatorviewer 优化定位符生成,支持生成Java,Python自动化代码
  • 原文地址:https://www.cnblogs.com/hd92/p/13591494.html
Copyright © 2011-2022 走看看