fastadmin+python+mysql +wxbot实现万能模糊查询(和chatgpt一起完成的)

 废话不多说直接上代码:

功能,fastadmin后台管理这些机房服务器的信息,wxbot 通过/指令+任意字段的信息查询 让wxbot去数据库里查询相关的信息,在通过wx发送给你。 

 1.创建数据库

CREATE TABLE fa_databank (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    Platform VARCHAR(255) COMMENT '平台名称',
    Type VARCHAR(255) COMMENT '系统类型',
    CPU INT COMMENT 'CPU核心数量',
    Memory_GB INT COMMENT '内存大小 (以GB为单位)',
    System_Disk_GB INT COMMENT '系统硬盘大小 (以GB为单位)',
    Data_Disk_GB INT COMMENT '数据硬盘大小 (以GB为单位)',
    GPU_Memory_GB INT COMMENT 'GPU内存大小 (以GB为单位)',
    Operating_System VARCHAR(255) COMMENT '操作系统类型',
    Login_Account VARCHAR(255) COMMENT '登录账户名称',
    VLAN INT COMMENT '虚拟局域网编号',
    Network_Card_IP VARCHAR(255) COMMENT '网卡的IP地址',
    Mapping_Relationship VARCHAR(255) COMMENT 'IP或者设备的映射关系',
    PartitionInfo VARCHAR(255) COMMENT '分区信息',
    Bastion_Host_Account VARCHAR(255) COMMENT '堡垒机账户名称',
    Bastion_Host_Password VARCHAR(255) COMMENT '堡垒机密码',
    Responsible_Person VARCHAR(255) COMMENT '负责人名称',
    Database_Information VARCHAR(255) COMMENT '数据库连接信息',
    URL VARCHAR(255) COMMENT '访问地址',
    Access_Info VARCHAR(255) COMMENT '访问信息',
    Installed_Service_Name VARCHAR(255) COMMENT '安装服务的名称',
    Path_Address VARCHAR(255) COMMENT '路径地址'
);

 2.fastadmin管理界面,导入信息

3.模糊查询函数,并且做了脱敏

import pymysql

def query_information(value):
    # 数据库连接参数,根据实际情况修改
    db = pymysql.connect("localhost", "username", "password", "database")
    cursor = db.cursor()

    # 注意:这里列出了所有的字段,根据实际情况修改
    fields = ['Platform', 'Type', 'CPU', 'Memory_GB', 'System_Disk_GB', 'Data_Disk_GB', 'GPU_Memory_GB', 
              'Operating_System', 'Login_Account', 'VLAN', 'Network_Card_IP', 'Mapping_Relationship', 
              'PartitionInfo', 'Bastion_Host_Account', 'Bastion_Host_Password', 'Responsible_Person', 
              'Database_Information', 'URL', 'Access_Info', 'Installed_Service_Name', 'Path_Address']

    # 映射字段英文名称和中文备注
    field_map = {
        'Platform': '平台',
        'Type': '类型',
        'CPU': 'CPU',
        'Memory_GB': '内存(GB)',
        'System_Disk_GB': '系统硬盘(GB)',
        'Data_Disk_GB': '数据硬盘(GB)',
        'GPU_Memory_GB': '显存(GB)',
        'Operating_System': '操作系统',
        'Login_Account': '登录账号',
        'VLAN': 'vlan',
        'Network_Card_IP': '网卡IP',
        'Mapping_Relationship': '映射关系',
        'PartitionInfo': '分区信息',
        'Bastion_Host_Account': '堡垒机账号',
        'Bastion_Host_Password': '堡垒机密码',
        'Responsible_Person': '负责人',
        'Database_Information': '数据库信息',
        'URL': 'URL',
        'Access_Info': '访问信息',
        'Installed_Service_Name': '安装服务名称',
        'Path_Address': '路径地址',
    }

    sensitive_fields = ['Login_Account', 'Bastion_Host_Password', 'Database_Information', 'Access_Info']

    # 构造SQL查询语句
    sql = "SELECT * FROM fa_databank WHERE " + " OR ".join([f"{field} LIKE %s" for field in fields])

    result_str = ''  # 用于存储结果的字符串
    try:
        cursor.execute(sql, [f"%{value}%"]*len(fields))  # 为每个字段提供值
        results = cursor.fetchall()
        if results:
            for row in results:
                # 获取字段名并将结果转换为字典
                columns = [column[0] for column in cursor.description]
                row_dict = dict(zip(columns, row))
                for field, val in row_dict.items():
                    if field in sensitive_fields:
                        val = '*' * len(str(val))  # 将敏感信息替换为星号
                    result_str += f"{field_map.get(field, field)}: {val}\n"
                result_str += "-"*50 + "\n"  # 分隔线
        else:
            result_str = "系统无记录"
    except Exception as e:
        result_str = f"Error occurred: {e}"
    finally:
        cursor.close()
        db.close()

    return result_str

# 使用函数查询数据
print(query_information('192.168'))  # 只输入部分IP地址也可以查询到相关信息
print(query_information('推流'))  # 只输入部分平台名称也可以查询到相关信息

4.wxbot 机器人对接效果

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

017 - STM32学习笔记 - SPI读写FLASH(二)

016 - STM32学习笔记 - SPI访问Flash(二) 上节内容学习了通过SPI读取FLASH的JEDEC_ID,在flash资料的指令表中,还看到有很多指令可以使用,这节继续学习使用其他指令,程序模板采用上节的模板。 为了方便起…

Java:控制流程 + 数组 详解(原理 + 用法 + 例子)

目录 控制流程块作用域if 条件语句for while 循环switch 多重选择break continue 中断控制流程语句 大数值数组多维数组字符串类型数组Array.sort() 数组排序for each 循环 控制流程 块作用域 块(即复合语句)是指由一对大括号{}括起来的若干条简单的 Ja…

断路器绝缘电阻试验

断路器 绝缘电阻试验 试验目的 检验断路器合闸后灭弧室、 主绝缘和提升杆是否发生受潮, 劣化变质等缺陷。 试验设备 绝缘电阻测试仪 厂家: 湖北众拓高试 试验接线 相对地 端口间 试验步骤 真空断路器本体与断口的绝缘电阻 试验前对兆欧表本身进行检…

C++服务器框架开发11——编译调试1/cmake学习

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) 上一篇:C服务器框架开发10——日志系统1~9代码 C服务器框架开发11——编译调试1/cmake学习 目前进度ubuntu下的cmake学习简单样例同…

使用Django数据库模型中的ForeignKey()形成数据表记录的父子层次结构

可以把ForeignKey()的第1个参数设置为值 “self” 实际形成数据表记录的父子层次结构。 下面是一个简单的实例: 在文件 E:\Python_project\P_001\myshop-test\myshop\app1\models.py 中写入下面的代码: from django.db import models# Create your mod…

创建型模式

创建型模式(Creational Pattern)关注对象的创建过程,是一类最常用的设计模式,在软件开发中应用非常广泛。创建型模式将对象的创建和使用分离,在使用对象时无须关心对象的创建细节,从而降低系统的耦合度&…

叮,您有一份《C语言思维导图》,请注意查收

目录导航 🚀 前言📺配套教程推荐🔰文章列表📚Part 1:初识C语言📚Part 2:分支和循环语句📚Part 3:函数📚Part 4:数组📚Part 5&#xff…

【数据结构】手撕排序NO.1----排序初识

目录 一. 前言 二. 排序的概念及运用 2.1 排序的概念 2.2 排序的运用 2.3 常见的排序算法 三. 冒泡and选择排序 3.1 冒泡排序 3.2 选择排序 四. 各大排序算法的复杂度和稳定性 一. 前言 从本期开始,我们的数据结构将迎来一个新的篇章:排序篇&#xff…

基于RASC的keil电子时钟制作(瑞萨RA)(1)----安装RASC

基于RASC的keil电子时钟制作_瑞萨RA_1安装RASC 概述硬件准备视频教程RA Smart Configurator软件下载RASC安装Keil下Renesas RA pack包安装 概述 RA Smart Configurator"是一种基于"灵活组合软件"概念的代码生成辅助工具。它可以自动生成微控制器的初始配置程序…

看见未来:定位咨询如何预测行业趋势

商业竞争时代,变化无处不在。科技日新月异,消费者需求日益多元,市场环境更加动态不定。在这个快速发展的时代,如果企业想要继续领先,就必须有能力预见未来,适应并驾驭这些变化,这就是定位咨询的…

【ElasticSearch】ES集群搭建、监控、故障转移

文章目录 1、ES集群介绍2、搭建ES集群3、集群状态监控4、集群职责及脑裂5、分布式新增和查询流程6、ES故障转移 1、ES集群介绍 单机的ES做数据存储与搜索,必然面临两个问题: 海量数据存储问题单点故障问题 因此,考虑使用ES集群&#xff1a…

LCD-STM32液晶显示中英文-(5.字符编码)

目录 字符编码 字符编码说明参考网站 字符编码 ASCII编码 ASCII编码介绍 ASCII编码表 中文编码 1. GB2312标准 区位码 2. GBK编码 3. GB18030 各个标准的对比说明 4. Big5编码 字符编码 字符编码说明参考网站 字符编码及转换测试:导航菜单 - 千千秀字 …

学习AJAX

AJAX 🚀 HTTP请求报文响应报文 🚄 express框架🚬 express基本使用 🚒 原生AJAX🚬 GET.HTML🚬 POST.HTML🚬 JSON.HTML🚬 nodemon工具可以帮助重启服务🚬 IE缓存问题&#…

Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

一、说在前面的话 本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等…

Java springBoot项目报LDAP health check failed

报错内容如下: 在bootstrap.yml文件里加 management:health:ldap:enabled: false 配置。 或者在application.properties文件里加: management.health.ldap.enabledfalse 参考答案:LDAP health check failed 难道没有人遇到这样的问题吗&…

TCP/IP基础知识笔记

应用层:为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。 应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。 传输层:为应用层提供网络支持。 *TCP包含众多特性比如流量控制、超时重传、拥塞控制等因此可…

【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64

为什么叫x86和x86_64和AMD64? 为什么大家叫x86为32位系统? 为什么软件版本会注明 for amd64版本,不是intel64呢? x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令…

LinkNet分割模型搭建

原论文:LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation 直接步入正题~~~ 一、LinkNet 1.decoder模块 class DecoderBlock(nn.Module):def __init__(self, in_channels, n_filters): #512, 256super(DecoderBlock, self).__in…

linux kernel单独编译某项驱动

linux内核经常涉及编译某一项驱动代码的场景,本次以网卡驱动e1000为例说明整个步骤流程。 首先编译内核驱动不必要编译整个内核,但编译的驱动代码必须要和要安装的内核版本保持一致,否则经常会出现无法加载模块。 在编译驱动前,最…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势,是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤,最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…