当前位置: 首页 > 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开发中的应用,特别是在处理数据库记录方面的强大功能。

相关文章:

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

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

ZLMRTCClient配置说明与用法(含示例)

webRTC播放视频 后面在项目中会用到通过推拉播放视频流的技术&#xff0c;所以最近预研了一下webRTC 首先需要引入封装好的webRTC客户端的js文件ZLMRTCClient.js 下面是地址需要的自行下载 http://my.zsyou.top/2024/ZLMRTCClient.js 配置说明 new ZLMRTCClient.Endpoint…...

nginx代理服务配置,基于http协议-Linux(CentOS)

基于http协议的nginx代理服务 1. 打开 Nginx 虚拟机80端口配置文件2. 添加代理配置3. 重启nginx服务 nginx代理缓存配置 1. 打开 Nginx 虚拟机80端口配置文件 Nginx 的默认80端口虚拟机配置文件通常位于/etc/nginx/conf.d/default.conf。 vim /etc/nginx/conf.d/default.con…...

Photos框架 - 自定义媒体资源选择器(数据部分)

引言 在iOS开发中&#xff0c;系统已经为我们提供了多种便捷的媒体资源选择方式&#xff0c;如UIImagePickerController和PHPickerViewController。这些方式不仅使用方便、界面友好&#xff0c;而且我们完全不需要担心性能和稳定性问题&#xff0c;因为它们是由系统提供的&…...

Spring Boot + Spring Cloud 入门

运行配置 java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.activetest --my1.age32 --debugtrue "D:\Program Files\Redis\redis-server.exe" D:\Program Files\Redis\redis.windows.conf "D:\Program Files\Redis\redis-cli.exe" &q…...

怎么使用动态IP地址上网

如何设置动态IP地址上网&#xff1f; 设置动态IP地址上网的步骤如下&#xff1a; 一、了解动态IP地址 动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分配给用户的IP地址&#xff0c;它会根据用户的需求和网络情况实时改变。相比于静态IP地址&#xff0c;动态…...

【源码+文档+调试讲解】智慧物流小程序的设计与实现

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…...

QT:控件圆角设置、固定窗口大小

实现控件圆角度设置//使用的是setStyleSheet方法 //改变的控件是QTextEdit&#xff0c;如果你想改变其他控件&#xff0c;将QTextEdit进行更换 this->setStyleSheet("QTextEdit{background-color:#FFFFFF;border-top-left-radius:15px;border-top-right-radius:15px;bo…...

【JavaScript】深入理解 `let`、`var` 和 `const`

文章目录 一、var 的声明与特点二、let 的声明与特点三、const 的声明与特点四、let、var 和 const 的对比五、实战示例六、最佳实践 在 JavaScript 中&#xff0c;变量声明是编程的基础&#xff0c;而 let、var 和 const 是三种常用的变量声明方式。本文将详细介绍这三种变量声…...

云监控(华为) | 实训学习day7(10)

水一篇。。。。。。。。。。。。。 强迫症打卡必须要满 企拓 今天没有将东西 2024/7/22 规划学习路线对于进入AI行业至关重要。以下是一个详细的学习路线规划&#xff0c;旨在帮助你从零基础到成为一名合格的AI或大数据分析师&#xff1a; 第一阶段&#xff1a;基础知识建设…...

JS_plus.key.addEventListener监听键盘按键

官方文档&#xff1a;https://www.html5plus.org/doc/zh_cn/key.html 监听事件 plus.key.addEventListener(keydown, e > {console.log("keydown: "e.keyCode) }) plus.key.addEventListener(keyup, e > {console.log("keyup: "e.keyCode) })移除事…...

对话系统(Chat)与自主代理(Agent)对撞

随着生成式AI技术的不断进步&#xff0c;关于其未来发展方向的讨论也愈发激烈。究竟生成式AI的未来是在对话系统&#xff08;Chat&#xff09;中展现智慧&#xff0c;还是在自主代理&#xff08;Agent&#xff09;中体现能力&#xff1f;这一问题引发了广泛的讨论和探索。 首先…...

sql server 连接报错error 40

做个简单的记录,造成40 的原因有很多,你的错误并不一定就是我遇到的这种情况. 错误描述: 首先我在使用ssms 工具连接的时候是可以正常连接的,也能对数据库进行操作. 在使用 ef core 连接 Sql Server 时报错: Microsoft.Data.SqlClient.SqlException (0x80131904): A network-r…...

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题&#xff08;如账号被盗、邮件系统存在安全漏洞等&#xff09;不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …...

MySQL查询优化:提升数据库性能的策略

在数据库管理和应用中&#xff0c;优化查询是提高MySQL数据库性能的关键环节。随着数据量的不断增长&#xff0c;如何高效地检索和处理数据成为了一个重要的挑战。本文将介绍一系列优化MySQL查询的策略&#xff0c;帮助开发者和管理员提升数据库的性能。 案例1: 使用索引优化查…...

vue-快速入门

Vue 前端体系、前后端分离 1、概述 1.1、简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;可以高效地开发用户界面。…...

【网络流】——初识(最大流)

网络流-最大流 基础信息引入一些概念基本性质 最大流定义 Ford–Fulkerson 增广Edmons−Karp算法Dinic 算法参考文献 基础信息 引入 假定现在有一个无限放水的自来水厂和一个无限收水的小区&#xff0c;他们之间有多条水管和一些节点构成。 每一条水管有三个属性&#xff1a…...

【STM32嵌入式系统设计与开发---拓展】——1_10矩阵按键

这里写目录标题 1、矩阵按键2、代码片段分析 1、矩阵按键 通过将4x4矩阵按键的每一行依次设为低电平&#xff0c;同时保持其它行为高电平&#xff0c;然后读取所有列的电平状态&#xff0c;可以检测到哪个按键被按下。如果某列变为低电平&#xff0c;说明对应行和列的按键被按下…...

长期更新方法库推荐pmq-ui

# pmq-ui pmq-ui 好用方法库ui库, 欢迎您的使用 ## 安装 1. 克隆项目库到本地&#xff1a; 2. 进入项目目录&#xff1a;cd pmq-ui 3. 安装依赖&#xff1a;npm install pmq-ui ## 使用 <!-- 1. 启动应用&#xff1a; 2. 访问 [http://localhost:3000](http://localhost:300…...

<数据集>抽烟识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;4860张 标注数量(xml文件个数)&#xff1a;4860 标注数量(txt文件个数)&#xff1a;4860 标注类别数&#xff1a;1 标注类别名称&#xff1a;[smoking] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对…...

大数据领域数据科学与云计算的结合应用

大数据领域数据科学与云计算的结合应用 关键词:大数据、数据科学、云计算、结合应用、数据分析 摘要:本文深入探讨了大数据领域中数据科学与云计算的结合应用。首先介绍了数据科学和云计算的背景知识,然后详细解释了这两个核心概念及其相互关系。通过具体的算法原理、数学模…...

OpenClaw内存优化:Qwen3-32B-Chat在16G设备运行方案

OpenClaw内存优化&#xff1a;Qwen3-32B-Chat在16G设备运行方案 1. 为什么需要内存优化&#xff1f; 去年冬天&#xff0c;当我第一次尝试在16GB内存的MacBook Pro上运行Qwen3-32B-Chat模型时&#xff0c;系统几乎立即崩溃。这让我意识到&#xff0c;想要在资源有限的设备上运…...

收藏!AI技能进化全解析:从聊天搭子到行业专家的成长之路

本文回顾了AI技能的演进过程&#xff0c;从最初只能进行简单对话的聊天机器人&#xff0c;到如今能够理解行业规范、执行复杂任务的智能体。文章详细介绍了AI技能发展的五个阶段&#xff1a;初级聊天机器人、通过函数调用实现工具交互、通用接口MCP规范、智能体引擎赋予环境感知…...

LeagueAkari终极教程:英雄联盟玩家的智能辅助工具完全指南

LeagueAkari终极教程&#xff1a;英雄联盟玩家的智能辅助工具完全指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkar…...

手柄优化指南:DS4Windows摇杆调校与硬件适配完全手册

手柄优化指南&#xff1a;DS4Windows摇杆调校与硬件适配完全手册 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 在游戏体验中&#xff0c;手柄摇杆的精准控制直接影响操作手感与游戏表现…...

你有多难拒绝别人?免费个人边界感与拒绝能力测试,看清你的“不敢拒绝“根源

你有多难拒绝别人&#xff1f;免费个人边界感与拒绝能力测试&#xff0c;看清你的"不敢拒绝"根源 引言 你有没有过这样的时刻—— 朋友临时约你&#xff0c;你明明很累想休息&#xff0c;却还是答应了同事请你帮忙做不属于你的工作&#xff0c;你不好意思拒绝&…...

保姆级教程:在银河麒麟V10桌面版上,用Docker容器化部署SpringBoot + 达梦数据库应用

银河麒麟V10桌面版容器化实战&#xff1a;SpringBoot与达梦数据库的Docker化部署指南 在国产化技术栈日益成熟的今天&#xff0c;将传统应用迁移到容器化环境已成为提升部署效率和系统可移植性的关键路径。银河麒麟V10作为国产操作系统的代表&#xff0c;结合飞腾CPU的硬件生态…...

FastAPI流式响应性能断崖式下跌?3个隐藏内存泄漏点,资深工程师连夜修复的5行关键代码

第一章&#xff1a;FastAPI 2.0 异步 AI 流式响应 面试题汇总FastAPI 2.0 原生强化了对异步流式响应&#xff08;StreamingResponse&#xff09;的支持&#xff0c;尤其在大语言模型&#xff08;LLM&#xff09;推理、实时 token 生成、语音转文字等 AI 场景中成为高频考点。面…...

Ubuntu 22.04 开机卡在/dev/sda3: clean的磁盘空间分析与扩容实战

1. 问题现象与初步诊断 当你兴冲冲地按下Ubuntu 22.04的开机键&#xff0c;却看到屏幕卡在/dev/sda3: clean这个神秘提示时&#xff0c;那种感觉就像开车时突然遇到路障——明明昨天还能正常使用&#xff0c;今天怎么就罢工了&#xff1f;这种情况我遇到过不止一次&#xff0c;…...

别再死记命令了!用EVE-NG模拟器5分钟搞定思科GRE隧道(附OSPF联动配置)

5分钟玩转思科GRE隧道&#xff1a;EVE-NG实战中的高效学习法 第一次在EVE-NG里搭建GRE隧道时&#xff0c;我盯着满屏的命令行发呆——这些配置到底在做什么&#xff1f;为什么tunnel接口要配源和目的地址&#xff1f;OSPF又是怎么和隧道联动的&#xff1f;直到我用Wireshark抓到…...