# showDatasFromDatabasePython **Repository Path**: huanglaijun/showDatasFromDatabasePython ## Basic Information - **Project Name**: showDatasFromDatabasePython - **Description**: Python引用flask框架展示MySQL、ES数据 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-10 - **Last Updated**: 2023-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 功能介绍 1. 读取MySQL短信发送记录数据表,将读取的数据进行处理,最终以web浏览器方式展示,提供搜索、下载功能 2. 读取MySQL网络资产数据表,将网络资产管理信息、基本信息合并展示,提供搜索、下载功能 3. 读取ES历史归档数据索引,将数据进行处理,最终以web浏览器方式展示,提供搜索、下载功能 4. 上述三个功能已实现,其余数据展示功能根据需求待定 #### 页面展示样例 功能页列表  短信记录  #### 程序整体框架 1. 实现语言:Python 2. 前端框架:flask 3. 后端插件:pymysql、elasticsearch数据库连接工具 #### 使用说明 1. 程序入口:show_es_mysql.py 2. 依赖关系:requirements.txt 3. 端口开通:程序所在服务器至MySQL服务器3306端口,客户端电脑到程序所在服务器5000端口 #### 代码思路(截取部分代码演示) 1. MySQL短信发送记录查询、下载,详情参考:read_mysql_md(name, phone)函数 ``` # 1. 定义mysql连接参数 dbconn = pymysql.connect( database='iso_db_core', ) ``` ``` # 2. 查询短信t_evt_sent_sms表,并定义根据哪些字段进行查询,将查询结果md返回至web前端,md.html页面 sql = "select * from t_evt_sent_sms WHERE NAME LIKE " + '"' +\ name + '"' + " AND PHONE LIKE " + '"' + \ phone+'"' + " order by LASTSENDTIME desc limit 1000;" return md ``` ``` # 3.
| 姓名 | 短信内容 | {% for u in md %}{{ u[11] }} | {{ u[12] }} | {% endfor %} ``` ``` # 4. 前端输入搜索内容再次调用后端查询sql,并将查询结果返回web页面展示,同时页面提供“下载”按钮,可将展示内容以excel方式下载 ``` 2. ES历史归档事件查询、下载,详情参考:read_es(index)函数 ``` # 1. 设置读取的ES索引 es = Elasticsearch(["http://10.8.1.30:9200/"]) body = { "query": { "match_all": {} } } value = es.search(index=index, body=body) ``` ``` # 2. 处理数据格式 # 原始读取数据只保留['hits']['hits']['_source']中数据,其它ES信息抛弃 # 抛弃无关数据后的数据格式为[{'a':1,'b':2},{'a':3,'b':4},{'a':5,'b':6}],即列表嵌套字典 # 由于字典索引相同,只需要value值,即将数据转化为((1,2),(3,4),(5,6)),元组嵌套元组 # 时间格式处理:由(('A', 'Y', '1664611790301'), ('B', 'N','1664525300000'))转化为(('A', 'Y', '2022-10-01 16:09:50'), ('B', 'N', '2022-09-30 16:08:20')) ``` ``` # 3. 处理后的数据传递给es.html以供展示、搜索、下载 # 前端页面未做优化,均引用bootstarp样式,可根据实际情况修改 ``` 3. MySQL网络资产基本信息、管理信息同一页面展示,详情参考:read_mysql_assets(assetsno, serial)函数 ``` # 1. 定义查询mysql读取资产的方法 # assetsno:资产编号, serial:序列号 dbconn = pymysql.connect( database='iso_db_core', port=3306 ) ``` ``` # 2. 定义查询 t_assets_offline 表语句 sql = "select * from t_assets_offline WHERE ASSETSNO LIKE " + '"' +\ assetsno + '"' + " AND SERIAL LIKE " + '"' + \ serial+'"' + " AND NODEPATH LIKE '%/2/1095846/%';" ``` ``` # 3. 处理查询结果 # MySQL取回的原始数据样式为(('思科','{"orgName": "10837"}','{"f001CA043BFACBA6A": "",此段为管理信息json}'),(每一个元组为一条资产记录),()) # 需将(('a1', 'b1', '{"k1": "v1","k2": "v2","k3":"","k4":""}', 'd1'), ('a2', 'b2', '{"k5": "v5","k6": "v6","k7":"","k8":""}', 'd2')) # 转化为:(('a1', 'b1', 'd1', 'v1', 'v2', '', ''),('a2', 'b2', 'v5', 'v6', '', '')) # 其中MGNTINFO字段存储的信息为管理信息,将管理信息提取出来展开至新数据队列,原MGNTINFO字段删除 # 最终将t_assets_offline数据表中内容全部展开,数据中无json格式信息,达到基本信息和管理信息都在表columns中 # 即: # 由[['a1', 'b1', '{"k1": "v1","k2": "v2","k3":"","k4":""}],['a2', 'b2', '{"k5": "v5","k6": "v6","k7":"","k8":""}', 'd2']] # ->[['a1', 'b1', 'v1', 'v2', '', ''],['a2', 'b2', 'v5', 'v6', '', '']] # 最终样式为(('a1', 'b1', 'd1', 'v1', 'v2', '', ''),('a2', 'b2', 'v5', 'v6', '', '')) ``` ``` # 4. 根据前端查询条件再次调用后端sql # 处理查询结果、并返回前端展示、下载 ```
|---|