# TextToSQL
**Repository Path**: li-xu-289/text-to-sql
## Basic Information
- **Project Name**: TextToSQL
- **Description**: TextToSQL是一个开源工具,允许用户使用自然语言查询数据库。它通过模型上下文协议(MCP)利用AI能力来解释用户查询,生成适当的SQL语句,并在数据库上执行它们。
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 38
- **Forks**: 6
- **Created**: 2025-08-13
- **Last Updated**: 2025-08-25
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
TextToSQL v1.0.0
基于MCP协议的自然语言数据库查询工具,直接用对话方式获取数据库信息,无需编写SQL!
[English](README.md) | [中文简体](README_CN.md)
## 官网:TextToSQL
## 概述
TextToSQL是一个开源工具,允许用户使用自然语言查询数据库。它通过模型上下文协议(MCP)利用AI能力来解释用户查询,生成适当的SQL语句,并在数据库上执行它们。
## 项目分支
本项目提供两个主要分支,满足不同的使用场景:
- **main分支**:完整的数据库查询工具
- 生成SQL语句并执行查询
- 返回实际查询结果
- 适合需要直接获取数据库信息的场景
- **sql_builder分支**:纯SQL生成工具
- 仅生成SQL语句,不执行实际操作
- 支持所有类型的SQL操作(SELECT、INSERT、UPDATE、DELETE、CREATE等)
- 适合SQL学习和教学场景
- 适合需要生成SQL但由其他系统执行的场景
## 特性
- **自然语言查询**:使用普通中文或英文查询您的数据库
- **SQL生成**:自动将自然语言转换为优化的SQL查询
- **数据库结构缓存**:缓存数据库结构以加快查询生成
- **支持复杂查询**:处理JOIN、子查询、聚合等
- **交互式查询优化**:通过对话方式优化您的数据库查询
## 架构
系统由以下几个组件组成:
1. **MCP服务器**:提供AI模型和数据库工具之间的接口
2. **数据库连接**:连接到您的数据库(目前通过PyMySQL支持MySQL/MariaDB)
3. **缓存管理**:用于缓存和更新数据库结构信息的工具
4. **查询执行**:执行SQL查询并处理结果的工具
## 安装
### 前提条件
- Python 3.8或更高版本
- 访问MySQL/MariaDB数据库的权限
### 设置
1. 克隆仓库:
```bash
git clone https://gitee.com/li-xu-289/text-to-sql.git
cd texttosql
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 配置数据库连接:
编辑`mcp_servers.py`文件,更新`get_apollo_confs()`函数中的数据库凭据。
## 使用方法
1. 启动MCP服务器:
```bash
python mcp_servers.py
```
2. 在AI客户端中配置MCP服务器连接:
```json
{
"mcpServers": {
"sql bot": {
"timeout": 60,
"type": "sse",
"url": "http://127.0.0.1:8000/sse"
}
}
}
```
3. 通过AI接口使用自然语言查询数据库:
- 编写代码,使用AI接口调用模型进行处理
- 可以参考`prompt.py`文件中的提示词来指导模型生成SQL并执行查询
4. 查询结果的处理方式:
当前的处理方式是将查询结果保存到固定路径的JSON文件中,同时返回JSON格式的结果:
```python
# 在tools/query_table_data.py中的结果处理逻辑
# 保存到JSON文件
json_file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data.json')
os.makedirs(os.path.dirname(json_file_path), exist_ok=True)
with open(json_file_path, 'w', encoding='utf-8') as f:
json.dump(result_data, f, ensure_ascii=False, indent=4)
# 同时返回JSON格式数据
return {
"status": "success",
"message": f"数据查询成功,已保存 {len(rows)} 条记录到JSON文件",
"fields_count": len(field_names),
"records_count": len(rows),
"sql": sql, # 返回执行的SQL语句,便于调试
"data": result_data # 包含实际结果
}
```
### 查询示例
- "显示IT部门的所有员工"
- "按部门统计平均薪资是多少?"
- "查找过去3个月内下单的客户"
- "列出销售量前5的产品"
## 工具
系统通过MCP接口提供了几个工具:
- **get_table_data**:在数据库上执行SQL查询
- **get_cache_info**:检索缓存的表和字段信息
- **update_cache_info**:使用最新的数据库结构更新缓存
## 自定义
您可以通过以下方式自定义系统:
1. 修改`prompt.py`中的提示词,调整AI解释查询的方式
2. 扩展`tools/`目录中的工具,添加新功能
3. 更新数据库连接逻辑,支持其他类型的数据库
## 许可证
该项目采用MIT许可证 - 详情请参阅LICENSE文件。
## 致谢
- 感谢所有帮助改进此项目的贡献者
- 特别感谢开源社区提供的工具和库,使这个项目成为可能
## 联系与支持
### 联系我
### 支持本项目
