当前位置: 首页 > news >正文

Python从0到100(四十四):读取数据库数据

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

一、获取全部记录

1.1 增加客户

在Python Web开发中,我们经常需要处理客户数据。首先,我们需要在数据库中添加一些客户记录。这可以通过Django的admin界面完成,或者直接在数据库中添加。以下是通过Django admin界面添加客户的示例:
通过Django admin添加客户
此时就直接在我们的数据库管理中,出现了客户信息,也可以直接通过数据库里面的添加功能,在数据库里面添加。

1.2 获取所有表记录

接下来,我们将实现一个功能,当浏览器访问 sales/customers/ 时,服务端返回系统中所有的客户记录。这可以通过Django的Model和QuerySet来实现。以下是views.py中的示例代码:

from django.http import HttpResponse
from common.models import Customerdef listcustomers(request):# 获取所有客户记录的QuerySetqs = Customer.objects.values()retStr = ''# 遍历QuerySet,构建返回字符串for customer in qs:retStr += '<br>'.join([f'{name} : {value}' for name, value in customer.items()]) + '<br>'return HttpResponse(retStr)

Customer.objects.values() 就会返回一个 QuerySet 对象,这个对象是Django 定义的,在这里它包含所有的Customer 表记录。
QuerySet 对象 可以使用 for 循环遍历取出里面所有的元素。每个元素 对应 一条表记录。
每条表记录元素都是一个dict对象,其中 每个元素的 key 是表字段名,value 是 该记录的字段值
上面的代码就可以将 每条记录的信息存储到字符串中 返回给 前端浏览器。

1.3 修改路由表

为了让Django知道如何处理 sales/customers/ 的请求,我们需要在urls.py中添加相应的路由规则。
前面,我们在bysms\urls.py 主路由文件中,已经有如下的记录了:

    # 凡是 url 以 sales/  开头的,# 都根据 sales.urls 里面的 子路由表进行路由path('sales/', include('sales.urls')),

这条URL记录,指明 凡是 url 以 sales/ 开头的,都根据 sales.urls 里面的 子路由表进行路由。我们只需修改 sales/urls.py 即可,添加如下记录:

  path('customers/', views.listcustomers),

在这里插入图片描述

大家可以使用 admin 登录, 再添加一些 客户记录。
然后可以在浏览器输入如下 网址: http://127.0.0.1:8080/sales/customers/
回车后,浏览器显示结果类似如下:
在这里插入图片描述

和我们数据库中的记录信息一致。

1.4 迁移数据库

定义好模型后,需要执行迁移来更新数据库结构:

python manage.py makemigrations
python manage.py migrate

1.5 使用Django Admin添加客户数据

为了让示例更加完整,我们使用Django Admin来添加一些初始客户数据。在admin.py中注册Customer模型:

from django.contrib import admin
from .models import Customeradmin.site.register(Customer)

启动Django开发服务器,并访问http://127.0.0.1:8000/admin来添加客户数据。

1.6 创建视图以获取所有客户记录

views.py中,我们将创建一个视图函数来处理获取所有客户记录的请求:

from django.http import HttpResponse
from .models import Customerdef listcustomers(request):customers = Customer.objects.all().values()retStr = '<h1>所有客户记录</h1>'for customer in customers:retStr += f'<p>姓名: {customer["name"]}, 电话: {customer["phonenumber"]}, 地址: {customer["address"]}</p>'return HttpResponse(retStr)

1.7 配置URL路由

最后,我们需要在urls.py中配置URL路由,以便将请求映射到我们的视图函数:

from django.urls import path
from . import viewsurlpatterns = [path('customers/', views.listcustomers),
]

二、根据条件过滤客户记录

2.1 理解过滤条件

过滤条件允许我们根据特定的参数来查询数据库中的记录。例如,我们可能只想获取电话号码为13000000001的客户记录。
我们可以通过 filter 方法加入过滤条件,修改view里面的代码,如下所示:

def listcustomers(request):# 返回一个 QuerySet 对象 ,包含所有的表记录qs = Customer.objects.values()# 检查url中是否有参数phonenumberph =  request.GET.get('phonenumber',None)# 如果有,添加过滤条件if ph:qs = qs.filter(phonenumber=ph)# 定义返回字符串retStr = ''for customer in  qs:for name,value in customer.items():retStr += f'{name} : {value} | '# <br> 表示换行retStr += '<br>'return HttpResponse(retStr)

与刚才不同的是,我们加入了一段过滤条件:

  # 检查url中是否有参数phonenumberph =  request.GET.get('phonenumber',None)# 如果有,添加过滤条件if ph:qs = qs.filter(phonenumber=ph)

2.2 修改视图以支持过滤

看到函数定义的参数 request了:
Django 框架在 url 路由匹配到函数后, 调用函数时,会传入 一个 HttpRequest 对象给参数变量 request,该对象里面 包含了请求的数据信息。
HTTP 的 Get 请求url里面的参数(术语叫 querystring 里面的参数), 可以通过HttpRequest对象的 GET 属性获取。这是一个类似dict的对象。

比如要获取querystring里面的 phonenumber 参数 ,就可以像这样:

ph =  request.GET.get('phonenumber',None)

第二个参数传入 None 表示,如果没有 phonenumber 参数在 querystring中 ,就会返回 None。
然后通过调用 QuerySet 对象的filter方法,就可以把查询过滤条件加上去:

qs = qs.filter(phonenumber=ph)

有了这个过滤条件,Django 会在底层执行数据库查询的SQL语句 加上相应的 where 从句,进行过滤查询。
注意,参数名 phonenumber 是和 定义的表 model 的属性名 phonenumber 一致的。
filter的过滤条件可以有多个,只要继续在后面的参数添加过滤条件即可。
比如:

qs = qs.filter(phonenumber=ph,address='山东青岛')

这样就 除了 根据电话号码字段过滤,还有根据 地址字段过滤。

2.3 测试过滤功能

启动Django开发服务器,然后在浏览器中访问以下URL来测试过滤功能:

http://127.0.0.1:8000/sales/customers/?phonenumber=13000000001

就可以只看到电话号码为13000000001的客户记录。

结论

通过本篇文章,我们学习了如何在Django中获取和过滤客户记录。我们从创建模型开始,通过迁移更新数据库结构,使用Django Admin添加数据,然后创建视图来处理数据的获取和过滤。最后,我们配置了URL路由来将请求映射到相应的视图函数。希望这篇文章能帮助您更好地理解Django在Web开发中的应用,特别是在处理数据库记录方面的强大功能。

http://www.lryc.cn/news/406246.html

相关文章:

  • ZLMRTCClient配置说明与用法(含示例)
  • nginx代理服务配置,基于http协议-Linux(CentOS)
  • Photos框架 - 自定义媒体资源选择器(数据部分)
  • Spring Boot + Spring Cloud 入门
  • 怎么使用动态IP地址上网
  • 【源码+文档+调试讲解】智慧物流小程序的设计与实现
  • QT:控件圆角设置、固定窗口大小
  • 【JavaScript】深入理解 `let`、`var` 和 `const`
  • 云监控(华为) | 实训学习day7(10)
  • JS_plus.key.addEventListener监听键盘按键
  • 对话系统(Chat)与自主代理(Agent)对撞
  • sql server 连接报错error 40
  • 邮件安全篇:如何防止邮件泄密?
  • MySQL查询优化:提升数据库性能的策略
  • vue-快速入门
  • 【网络流】——初识(最大流)
  • 【STM32嵌入式系统设计与开发---拓展】——1_10矩阵按键
  • 长期更新方法库推荐pmq-ui
  • <数据集>抽烟识别数据集<目标检测>
  • SQL Server 端口设置教程
  • 【React1】React概述、基本使用、脚手架、JSX、组件
  • k8s部署kafka集群
  • (C++回溯01) 组合
  • k8s学习笔记——安装istio的仪表盘之prometheus安装
  • 四、GD32 MCU 常见外设介绍 (7) 7.I2C 模块介绍
  • Apollo 配置中心的部署与使用经验
  • Perl中的设计模式革新:命令模式的实现与应用
  • Java8-求两个集合取交集
  • 爬虫学习4:爬取王者荣耀技能信息
  • 在Ubuntu 14.04上安装和使用Memcache的方法