MySQL自然语言查询系统

基于MCP的MySQL数据库查询系统,通过自然语言转SQL和图形界面实现高效数据库交互,具备安全防护和查询优化功能。

  • by Dr-NIJIKA
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 dr-nijika/mcp_mysql

使用说明

项目概述

本项目是一个基于MCP的MySQL数据库查询系统,通过Streamlit提供图形界面。通过MCP接口使用自然语言实现和数据库系统间的交互,查询相关信息,同时实现了一系列的加强功能和安全控制处理。

目录

功能特点

核心功能

  • MCP 服务运行:通过MCP服务联通Mysql实例
  • 自然语言转SQL:通过MCP接口将自然语言转换为精确的SQL查询
  • 数据库结构可视化:直观展示表结构和查询结果信息
  • GUI和CLI查询界面:实现了 CLI 和 GUI(Streamlit) 查询界面

高级特性

  • SQL安全防护:内置SQL注入检测、敏感字段过滤和只读SQL白名单过滤
  • 表结构简化输出:支持按表名过滤返回 schema
  • 查询结果分页:支持长结果在GUI下的自动分页返回
  • 查询性能优化:自动优化生成的SQL语句
  • 查询日志记录:MCP Server记录每次执行的SQL和时间戳
  • 数据导出:一键导出查询结果为CSV格式

安装与运行

前置要求

  • Python 3.10
  • MySQL 8.0+ 数据库
  • API密钥

安装步骤

1.克隆仓库

git clone https://github.com/Dr-NIJIKA/MCP_MYSQL.git
cd mcp-mysql

2.设置虚拟环境

# Windows
python -m venv venv
venv\Scripts\activate
	
# 建议使用Conda(Anaconda/Miniconda)

3.安装依赖

pip install -r requirements.txt

5.配置环境

创建.env文件:
# 数据库配置
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=college  # 默认
    
# Deepseek API配置
DEEPSEEK_API_KEY=your_api_key
POOL_SIZE=5

6.运行应用

# 使用GUI界面
streamlit run streamlit_app.py
	
# 使用CLI界面
python mcp_service.py # 启动服务
python cli.py         # 使用cli界面

使用指南

1.连接数据库

  • 在侧边栏输入数据库名称(默认为college)
  • 测试连接确保配置正确

2.执行查询

  • 在输入框中输入想要查询的内容
    示例查询:
    • "显示历史系的学生"
    • "查询所有拥有前置课程的课"

3.结果浏览

  • 输出生成的SQL语句
  • 使用分页控件浏览数据
    • 可以在侧边栏选择所需的分页页面大小
    • 可以选择上(下)一页 或 输入页码跳转来进行页面的转换

4.表结构查看:

  • 勾选"显示表结构"查看详细字段信息
  • 输入所需要查看的表名,获取表结构

5.结果导出:

  • 点击“导出全部结果为CSV”,即可保存所得结果

技术架构

核心组件:

  1. 前端界面::基于Streamlit构建的响应式GUI
  2. LLM API交互: Deepseek自然语言处理
  3. MCP服务:基于MCP的服务器,与Mysql数据库进行交互

参考项目:

meanands/mysql-mcp