python编写API接口实现数据筛选、查询与分页

目录

一、背景

二、代码


一、背景

由于系统上需要分页展示数据,并提供按字段筛选数据的功能,于是需要我写个接口,以供前端使用。

接口可以通过python flask框架实现。Flask是一个轻量级的Web框架,它提供了足够的灵活性来构建定制的RESTful API。开发者可以根据需求轻松地设计和实现接口。

数据的查询可以通过pymysql连接MySQL数据库实现。数据的筛选和分页可以通过堆叠where条件、row_number实现。

二、代码

以下代码中连接的数据库用的是我电脑本地之前做学生管理系统的测试数据,可自行替换为自己的数据库、表、字段。

import flask
from flask import request
import datetime
from flask_cors import CORS
from flask import jsonify
import numpy as np
import pandas as pd
import pymysqlserver=flask.Flask(__name__)
# 解决跨域请求资源被拦截问题
CORS(server,supports_credentials=True,resources=r'/*')#从数据库读取数据
def get_data(sql,host,user,password,database,port):conn = pymysql.connect(host=host,user=user,password=password,database=database,port=port,charset='utf8',cursorclass=pymysql.cursors.DictCursor,connect_timeout=60)cur = conn.cursor()cur.execute(sql)data = cur.fetchall()conn.close()cur.close()return data#编写SQL
def build_sql(beginTime, endTime, name, data_type, pageNum, pageSize):conditions = []if beginTime and endTime:conditions.append("create_time>='{}' and create_time<='{}'".format(beginTime, endTime))if name:conditions.append("name like '%{}%'".format(name))if data_type:conditions.append("data_type='{}'".format(data_type))where_clause = " and ".join(conditions)sql = '''select id,name,t_class_id,create_time,data_typefrom (select id,name,t_class_id,create_time,data_type ,row_number() over(order by create_time desc ) as rnfrom student_score_student where 1=1{}) twhere t.rn>({}-1)*{}and t.rn<={}*{}'''.format('and ' + where_clause if where_clause else '', pageNum, pageSize, pageNum, pageSize)return sql@server.route('/DataList', methods=['GET','POST'])
def warningList():data = request.jsonbeginTime = data.get('beginTime')endTime = data.get('endTime')name = data.get('name')data_type = data.get('data_type')pageNum = int(data.get('pageNum', 1))pageSize = int(data.get('pageSize', 10))if beginTime and endTime:try:date_format = "%Y-%m-%d %H:%M:%S"beginTime = datetime.strptime(beginTime, date_format).strftime(date_format)endTime = datetime.strptime(endTime, date_format).strftime(date_format)except Exception:return jsonify(code='401', message='时间格式错误', data=None)sql = build_sql(beginTime, endTime, name, data_type, pageNum, pageSize)data = get_data(sql, 'localhost', 'root', None, 'auth_system', 3306)data_str = [{k: str(v) if k == 'create_time' else v for k, v in d.items()} for d in data]sql_count = "select count(1) as num from student_score_student"num = get_data(sql_count, 'localhost', 'root', None, 'auth_system', 3306)[0]['num']return jsonify(code='200', message='请求成功', data={'list': data_str, 'num': num})if __name__ == '__main__':server.run(debug=True, port=5006, host='0.0.0.0')

启动接口:

python xxx.py

测试接口:

返回数据:

{"code": "200","data": {"list": [{"create_time": "2023-03-06 20:15:56.916803","data_type": 0,"id": 9394,"name": "小吴1385","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.904704","data_type": 0,"id": 9393,"name": "小吴1384","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.892745","data_type": 0,"id": 9392,"name": "小吴1383","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.881069","data_type": 0,"id": 9391,"name": "小吴1382","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.869990","data_type": 0,"id": 9390,"name": "小吴1381","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.857891","data_type": 0,"id": 9389,"name": "小吴1380","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.846088","data_type": 0,"id": 9388,"name": "小吴1379","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.834624","data_type": 0,"id": 9387,"name": "小吴1378","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.823055","data_type": 0,"id": 9386,"name": "小吴1377","t_class_id": 24},{"create_time": "2023-03-06 20:15:56.811648","data_type": 0,"id": 9385,"name": "小吴1376","t_class_id": 24}],"num": 1292},"message": "请求成功"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用pycharm运行.sh文件

在PyCharm中运行.sh文件有几种方法&#xff0c;以下是其中一种常见的方法&#xff1a; 创建Shell脚本运行配置&#xff1a; 打开PyCharm&#xff0c;确保您的项目已经打开。 在项目中找到您的.sh文件&#xff0c;右键点击它并选择“Create <your_script_name>.sh”&…

学会Sass的高级用法,减少样式冗余

在当今的前端开发领域&#xff0c;样式表语言的进步已经显著提升了代码组织性和可维护性。Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;作为CSS预处理器的翘楚&#xff0c;以其强大的变量、嵌套规则、混合宏&#xff08;mixin&#xff09;、循环和函数等高…

STM32学习笔记(6_5)- TIM定时器的输出捕获原理

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

ASR-LLM-TTS 大模型对话实现案例;语音识别、大模型对话、声音生成

参考:https://blog.csdn.net/weixin_42357472/article/details/136305123(llm+tts) https://blog.csdn.net/weixin_42357472/article/details/136411769 (asr+vad) 这里LLM用的是chatglm;电脑声音播报用的playsound 代码: ##运行 python main.pymain.py from multipro…

mac电脑下安装和启动nginx

一,安装homebrew 必须安装了homebrew&#xff0c;可在终端输入命令brew -v查看是否已经安装,没安装的话安装一下: 如果未安装先安装&#xff08;网上很多文章&#xff09; 二,查看nginx是否存在 使用命令:brew search nginx查看nginx是否存在: 不存在的话,就使用brew inst…

记录RK键盘蓝牙搜索不到

说明书 现象 Q键快速闪烁等待回连但是蓝牙搜索不到 过程 使用手机尝试搜索&#xff0c;依旧失败 解决方案 fnw 长按 w键开始闪烁 打开蓝牙搜索 链接成功

mac 系统如何生成秘钥

1.打开终端&#xff0c;输入 cd ~/.ssh 进入.ssh目录&#xff0c;输入 ls 检查是否已经存在SSH密钥。如果看到类似 id_rsa.pub 的文件&#xff0c;说明已经有一对公钥和私钥&#xff0c;不用新建&#xff0c;直接查看就可以&#xff0c;如果没有需要生成新的密钥。 2.在终端输…

软件工程---专业名称

单元测试(Unit Testing):单元测试是一种软件测试方法,用于验证软件中最小的可测试单元(通常是函数或方法)是否按照预期工作。它通过编写测试用例来检查单元的输入和输出,以确保其功能正确性和稳定性。用例图(Use Case Diagram):用例图是一种UML(统一建模语言)图表,…

(三)Qt+OpenCV调用海康工业相机SDK抓拍示例

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a; &#xff08;一&#xff09;QtOpenCV调用海康工业相机SDK示例开发 第二章&#xff1a; &#xff08;二&#xff09;Qt多线程实现海康工业相机图像实时采集 第三章&#xff1a; &#xff08;…

如何在CentOS 7上搭建Redis Cluster ?

在CentOS 7上搭建Redis Cluster的过程涉及到准备环境、安装Redis、配置Redis实例以及初始化集群。下面是详细的步骤&#xff1a; 1. 环境准备 确保系统是最新的&#xff0c;如果你没有添加EPEL仓库&#xff0c;首先需要添加它&#xff0c;因为Redis可能需要从该仓库安装。 s…

许可型DeFi 项目NEOPIN:在合规的框架下推动DeFi的创新

合规化已成 DeFi 的主流方向 过去的几年里&#xff0c;全球金融市场见证了 DeFi 的快速增长。DeFi 通过提供无需中介的交易和借款等金融服务&#xff0c;为用户带来前所未有的便利。然而&#xff0c;其匿名性和去中心化的特性也为监管和安全带来挑战 —— DeFi项目的透明度不足…

Flutter中被屏蔽的概念,Scheduler(调度器)

前言 一切皆Widget&#xff0c;良好的底层设计都会屏蔽底层的逻辑&#xff0c;Java如此&#xff0c;Flutter亦是如此&#xff0c;甚至还有开发者面向Getx编程&#xff0c;那么我们可以做如是类比&#xff0c;Flutter是J2EE, Getx是Spring套件&#xff0c;作为Java后台开发&…

C#自定义控件 生成 与 加入到项目

C#自定义控件生成 在C#中&#xff0c;自定义控件通常是通过继承现有的控件类&#xff08;如UserControl、Form等&#xff09;并添加或修改其属性和方法来实现的。以下是一个简单的示例&#xff0c;演示如何创建一个自定义控件&#xff1a; 首先&#xff0c;创建一个新的Window…

荟萃分析R Meta-Analyses 1

参考&#xff1a;Harrer, M.、Cuijpers, P.、Furukawa, TA 和 Ebert, DD (2021)。 使用 R 进行荟萃分析&#xff1a;实践指南。佛罗里达州博卡拉顿和伦敦&#xff1a;Chapman & Hall/CRC Press。 ISBN 978-0-367-61007-4。 1.1什么是荟萃分析&#xff1f; 它的创始人之一 G…

电脑如何更新AMD独立显卡驱动?安装官方驱动的方法来了!

前言 有小伙伴在电脑上安装了独立显卡之后&#xff0c;总会用驱动人生或者驱动精灵等软件给独立显卡安装驱动。这种安装方法并不能说是错的&#xff0c;反正能用就行。 安装官方驱动的办法其实很简单&#xff0c;现在独立显卡一共就那么几家&#xff0c;最常见的显卡就是Nvidi…

我们是如何在 IDE 中设计 AutoDev 的 AI 编程开发智能体语言与框架?

上周微软发布了自家的 AI 编程和软件开发智能体框架&#xff1a;AutoDev&#xff0c;其与我们开发的 IDE 插件 AutoDev 有颇多的相似之处&#xff0c;特别是一些设计思路&#xff0c;以及在对于辅助软件开发任务的智能体以及一些基础设施上。 稍有不同的是&#xff1a; 交互介质…

随手笔记——禾赛Pandar64雷达旋转方向及坐标系定义

随手笔记——禾赛Pandar64雷达旋转方向及坐标系定义 手册下载

Maven学习记录

一、简介 1. Maven&#xff1a; 基于 Java 平台的项目管理和整合工具&#xff0c;将项目的开发和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09;。开发人员只需要做一些简单的配置&#xff0c;Maven 就可以自动完成项目的编译、测试、打包、发布以及部署等工作。…

【NLP学习记录】Embedding和EmbeddingBag

Embedding与EmbeddingBag详解 ●&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 ●&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 ●&#x1f680; 文章来源&#xff1a;K同学的学习圈子1、Embedding详解 Embedding是Pytorch中最基本…

备考ICA----Istio实验8---请求超时 Request Timeouts 实验

备考ICA----Istio实验8—请求超时 Request Timeouts 实验 1. 重置bookinfo环境 kubectl delete all --all --now kubectl delete dr --all kubectl delete vs --all kubectl delete gw --all kubectl apply -f istio/samples/bookinfo/platform/kube/bookinfo.yaml kubectl a…