Django实战(5)—— 数据库操作

前文

Django 实战 (1)—— 创建第一个Django项目
Django 实战 (2)—— 视图与 URL 配置
Django 实战 (3)—— Django 是怎么处理请求的?
Django 实战 (4)——连接 MySQL

在上一篇文章中,我们对数据库数据实现了新增,但是还有删除、修改、查询呢,这里就来实现删除、修改、查询的操作,也是非常简单的
在这里插入图片描述
这里是我们数据库中的数据

删除数据

在 views.py 中编写以下代码

from django.http import HttpResponse
from webapp.models import Test

def delete(request):
    Test.objects.filter(username='Lisa').delete()      # 根据姓名删除数据
    return HttpResponse("删除数据成功")

注意: 如果执行该操作 objects.all().delete(),将返回空值

接着,打开 urls.py 编写以下代码

from webapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',hello),
    path('delete/',views.delete)
]

OK.,代码编写完成,我们测试一下能否删除数据了,启动一下 Django 项目,访问 http://127.0.0.1:8000/delete/
在这里插入图片描述
OK,页面显示说我们已经成功删除数据,我们刷新一下数据库看下
在这里插入图片描述
OK,已经删除了

其实这代码转换成 SQL 的话就是:delete from 表名 where username = 'Lisa’

修改数据

修改数据也是非常简单
在这里插入图片描述
这里我们以修改 username 为例,就把 django 修改为 Django 吧。同样的,我们需要在 views.py(其实不限定的哈,你可以自定义一个文件来写业务代码,这里只是为了演示而已) 中编写代码

from django.http import HttpResponse
from webapp.models import Test

def update(request):
    user = Test.objects.get(username="django")         # 原本的用户名为 django
    user.username = "Django"                           # 修改后的用户名为 Django
    return HttpResponse("修改数据成功")

在 urls.py 中新增代码如下:

from webapp import views

urlpatterns = [
    path('update',views.update)
]

重启服务,访问一下 http://127.0.0.1:8000/update/
在这里插入图片描述
OK,说明我们修改数据成功了,我们刷新一下数据库看下是不是 把 django 修改为 Django 了
在这里插入图片描述
怎么回事???怎么没修改到?是报错了吗?我们看下控制台
在这里插入图片描述
没有啊,控制台显示访问正常啊,那怎么没修改到数据呢?不慌,我们来分析一下

user = Test.objects.get(username="django")         # 原本的用户名为 django
user.username = "Django"                           # 修改后的用户名为 Django
  • 首先第一行代码我们是查询用户名为 django 的用户,转换成 SQL 就是 select id,username,password from 表名 where username = ‘django’
  • 第二行代码才是我们要修改的的数据,转换为 SQL 就是 update 表名 set username = ‘Django’ where username = ‘django’

所以我们还需要一个保存的操作,也就是在代码中增加一句保存操作的代码,如下:

def update(request):
    user = Test.objects.get(username="django")         # 原本的用户名为 django
    user.username = "Django"                           # 修改后的用户名为 Django
    user.save()                                        # 保存操作
    return HttpResponse("修改数据成功")

重启服务,再次访问 http://127.0.0.1:8000/update/
在这里插入图片描述
我们再刷新一下数据库
在这里插入图片描述
OK,已经修改数据成功,但是这种做法好像不太聪明的样子,就没有一行代码搞定的那种吗?我们可以是直接使用 filter 来过滤然后使用 update函数,如下:

def update(request):
    user = Test.objects.filter(id=1).update(username='Django') # 将用户名为 django 的用户修改为 Django
    return HttpResponse("修改数据成功")

这段代码与上面的效果一样,转化为SQL是:update 表名 set username = ‘Django’ where id = 1
但是与之等同的 SQL 语句变得更高效,并且不会引起竞争条件

说明: update() 方法会返回一个整型数值,表示受影响的记录条数

比如我们打印一下 user,表示一条数据受影响了
在这里插入图片描述

查询数据

all()

查询所有数据,返回的是有个 QuerySet 集合

def selectAll(request):
    user_list = Test.objects.all() # 查询所有字段

filter()

如果只需要删除部分的数据,就不需要调用all()方法

def selectAll(request):
	user = Test.objects.filter(username='Django') # 根据条件查询

这里只讲述这两个方法,关于其他的方法朋友们可以查阅一下官方文档
为了更好的演示查询,我们编写一个 html 网页来测试一下吧,我们创建项目的时候会有一个 templates 模板,这是一个可以存放 html 页面的文件夹,我们在该文件夹下创建一个 html 文件吧
在这里插入图片描述
html 代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <table border="1" style="width: 100%">
        <tr style="text-align: center">
            <td>用户ID</td>
            <td>用户名</td>
            <td>用户密码</td>
        </tr>

        <!--使用迭代器循环遍历获取值-->
        {% for user in user %}
        <tr style="text-align: center">
            <td>{{ user.id }}</td>
            <td>{{ user.username }}</td>
            <td>{{ user.password }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

说明:上面的代码中比较新颖的地方就是下面这段代码了

{% for user in user %}
	<tr style="text-align: center">
		<td>{{ user.id }}</td>
		<td>{{ user.username }}</td>
		<td>{{ user.password }}</td>
	</tr>
{% endfor %}

其实就是下面这段代码有点难理解而已,这是一个组合,相当于 html 中的标签,有个开标签({% for 迭代名 in 被迭代名 %})还需要有个闭标签({% endfor %}

{% for 迭代名 in 被迭代名 %}

{% endfor %}

其实这段代码也并不难理解,这其实跟 for 循环没什么区别

for i in item:
	print(i)

所以这段代码就是把 user 中的信息迭代显示在 html 页面上,那么这个被 迭代的 user 是从哪里得到的数据呢?

{% for user in user %}
	<tr style="text-align: center">
		<td>{{ user.id }}</td>
		<td>{{ user.username }}</td>
		<td>{{ user.password }}</td>
	</tr>
{% endfor %}

是从我们在 views.py 文件中定义来的

from django.shortcuts import render
from webapp.models import Test

def selectAll(request):
    user_list = Test.objects.all() # 查询所有字段
    return render(request,"user.html",{'user':user_list}) # 将查询到的值赋予给user作用域

通过代码我们可以知道,我们想得到的结果集让 user_list 接受,然后 render 方法返回一个 html 页面,其中 { ‘user’ : user_list } 就是把我们 user_list 接收到的数据传给 user,从而让 html 可以得到我们传过去的值

编写完 views.py 之后我们还有修改一个 urls.py 文件

from webapp import views

urlpatterns = [
    path('insert/',views.insert),
    path('userList/',views.selectAll),
    path('delete/',views.delete),
    path('update/',views.update)
]

OK,我们重启一下服务,访问一下 http://127.0.0.1:8000/userList/

在这里插入图片描述
OK,这就是查询

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中进行数据库操作需要进行以下几个步骤: 1. 在settings.py文件中配置数据库连接信息。可以使用sqlite3或者MySQL等不同的数据库引擎。例如,如果要连接MySQL数据库,需要将DATABASES中的ENGINE设置为'django.db.backends.mysql',并指定HOST、PORT、NAME、USER和PASSWORD等相关参数。 2. 在views.py文件中编写对数据库操作代码。可以使用Django的ORM(对象关系映射)来进行数据库操作。例如,可以使用models.UserInfo.objects.create()创建一个新的数据库对象,并指定相应的属性值。 3. 在视图函数中处理用户的请求,根据请求的方法(GET或POST)执行相应的数据库操作。例如,可以在POST请求中通过request.POST获取用户提交的表单数据,并使用models.UserInfo.objects.create()将数据写入数据库。 4. 在模板中展示数据库中的数据。可以通过查询数据库获取相应的数据,并将其传递给模板进行展示。例如,可以使用models.UserInfo.objects.all()获取所有的数据库对象,并将其传递给模板进行渲染。 需要注意的是,在进行数据库操作之前,需要确保数据库已经创建并正确配置了相关的权限和表结构。可以在settings.py文件中的DATABASES配置中指定数据库名称、用户名和密码等信息。 总结起来,进行Django数据库操作的主要步骤包括配置数据库连接信息、编写数据库操作代码、处理用户请求以及在模板中展示数据。123 #### 引用[.reference_title] - *1* [Django数据库操作](https://blog.csdn.net/m0_65883616/article/details/125736469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [django基础之数据库操作](https://blog.csdn.net/inexaustible/article/details/107981925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值