功能概述

这个功能允许用户使用自然语言描述查询需求,由GPT自动转换为SQL语句并执行查询,无需手动编写SQL代码。系统支持多种主流数据库,包括MySQL、PostgreSQL、SQL Server等。

详细功能说明

1. 自然语言转SQL

  • 用户可以用日常语言描述查询需求
  • GPT会分析语义,自动生成相应的SQL查询语句
  • 支持复杂的查询条件,包括多表关联、聚合函数、子查询等

2. 数据库连接管理

  • 支持配置多个数据库连接
  • 可保存常用连接配置

3. 查询执行与结果展示

  • 自动执行生成的SQL语句
  • 以表格形式展示查询结果

4. 查询历史记录

  • 自动保存查询历史
  • 可按时间、数据库、关键字等条件检索历史查询

使用步骤

  1. 选择数据库连接 - 从已配置的连接中选择目标数据库,或新建数据库连接
  2. 输入查询需求 - 用自然语言描述查询需求
  3. 生成SQL - 系统自动生成SQL语句,用户可查看并确认
  4. 执行查询 - 点击执行按钮运行查询
  5. 保存/导出结果 - 可选择保存查询为模板或导出结果数据

应用场景

  • 业务分析: 销售数据分析、客户行为分析、库存状况查询
  • 日常报表: 自动生成日报、周报、业绩统计报表
  • 技术支持: 故障排查数据分析、系统日志查询

安全特性

  • 所有数据库连接信息加密存储
  • 查询权限控制,防止越权访问
  • SQL注入防护机制
  • 敏感数据自动脱敏处理

技术优势

  • 无需SQL专业知识即可查询数据库
  • 大幅提高数据分析效率
  • 降低人为编写SQL的错误风险

安装依赖

pip install --upgrade --quiet langchain-core langchain-community langchain-openai

编写代码

from langchain_core.prompts import ChatPromptTemplate
from langchain_community.utilities import SQLDatabase
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

template = """Based on the table schema below, write a SQL query that would answer the user's question:
{schema}

Question: {question}
SQL Query:"""
prompt = ChatPromptTemplate.from_template(template)

db = SQLDatabase.from_uri("sqlite:///./Chinook.db")

def get_schema(_):
    return db.get_table_info()

def run_query(query):
    return db.run(query)

model = ChatOpenAI(model="gpt-3.5-turbo")

sql_response = (
    RunnablePassthrough.assign(schema=get_schema)
    | prompt
    | model.bind(stop=["\nSQLResult:"])
    | StrOutputParser()
)

message = sql_response.invoke({"question": "How many employees are there?"})
print(f"message: {message}")

运行结果

message: SELECT COUNT(*) AS totalEmployees
FROM Employee;