genAI可以用于自然语言转SQL:
理解口语化的查询描述, 将业务需求转换为SQL
处理复杂的查询逻辑, 生成多表关联查询
本节我们使用deepseek实现自然语言转SQL
employee(name, salary, department)
表import requests
# DeepSeek API URL (Ollama本地服务器地址)
OLLAMA_URL = "http://localhost:11434/api/generate"
def generate_sql_query(natural_query, database_type="MySQL", database_schema="employee(name, salary, department)"):
"""
使用DeepSeek AI将自然语言查询转换为SQL语句
"""
# 如果想传入数据库引擎,比如MySQL, Postgres, 可以基于这个prompt
prompt = f"Convert this natural language query into {database_type}-compatible SQL:\n\nQuery: {natural_query}"
# 最终使用的提示词模板,包含数据库schema信息
prompt = f"Convert the following natural language query into an SQL query:\n\n" \
f"Query: '{natural_query}'\n\n" \
f"Assume the following database schema: {database_schema}.\n" \
f"Return only the SQL query, without explanation."
# 构建API请求参数
payload = {
"model": "deepseek-r1", # 使用deepseek-r1模型
"prompt": prompt, # 提示词内容
"stream": False # 不使用流式输出
}
# 发送POST请求到Ollama API
response = requests.post(OLLAMA_URL, json=payload)
# 处理API响应
if response.status_code == 200:
return response.json().get("response", "No SQL query generated.") # 返回生成的SQL查询
else:
return f"Error: {response.text}" # 返回错误信息
# SQL查询生成器测试代码
if __name__ == "__main__":
test_query = "列出所有薪资大于10000的员工"
print(generate_sql_query(test_query))
运行结果如下:
如果想用Gradio做一个web页面,代码如下:
import requests
import gradio as gr
# DeepSeek API URL (Ollama本地服务器地址)
OLLAMA_URL = "http://localhost:11434/api/generate"
def generate_sql_query(natural_query, database_type="MySQL", database_schema="employee(name, salary, department)"):
"""
使用DeepSeek AI将自然语言查询转换为SQL语句
"""
# 以下是优化SQL查询的提示词模板(已注释)
# prompt = f"Optimize the following SQL query for better performance:\n\n{sql_query}\n\n" \
# f"Suggest indexing strategies if necessary."
prompt = f"Convert this natural language query into {database_type}-compatible SQL:\n\nQuery: {natural_query}"
# 最终使用的提示词模板,包含数据库schema信息
prompt = f"Convert the following natural language query into an SQL query:\n\n" \
f"Query: '{natural_query}'\n\n" \
f"Assume the following database schema: {database_schema}.\n" \
f"Return only the SQL query, without explanation."
# 构建API请求参数
payload = {
"model": "deepseek-r1", # 使用deepseek-r1模型
"prompt": prompt, # 提示词内容
"stream": False # 不使用流式输出
}
# 发送POST请求到Ollama API
response = requests.post(OLLAMA_URL, json=payload)
# 处理API响应
if response.status_code == 200:
return response.json().get("response", "No SQL query generated.") # 返回生成的SQL查询
else:
return f"Error: {response.text}" # 返回错误信息
# 创建Gradio界面
interface = gr.Interface(
fn=generate_sql_query, # 指定处理函数
inputs=[ # 定义输入组件
gr.Textbox(lines=2, placeholder="输入自然语言查询"), # 文本框用于输入自然语言查询
gr.Textbox(label="数据库Schema (可选)", placeholder="表名(列1, 列2, ...)"), # 文本框用于输入数据库schema
],
outputs=gr.Textbox(label="生成的SQL查询"), # 输出组件:显示生成的SQL查询
title="AI驱动的SQL查询生成器", # 界面标题
description="输入自然语言查询,AI将为您生成对应的SQL查询语句。" # 界面描述文本
)
# 启动Web应用
if __name__ == "__main__":
interface.launch()
运行python,访问 http://127.0.0.1:7860/ :