必看免费小说手机版
75.81MB · 2025-11-25
在日常开发中,我们经常需要从数据库中查询数据。但对非技术人员来说,写 SQL 查询语句可能是个“噩梦”。而随着大模型的兴起,将自然语言直接转化为 SQL 查询已成为现实。
今天,我将结合 DeepSeek Reasoner 模型 和 SQLite 数据库,展示如何通过一段简单的 Python 代码,实现“你说中文,我出 SQL”的自动化能力。
给定一个简单的员工信息表,用户输入自然语言问题(如:“开发部门员工的姓名和工资是多少?”),程序自动解析并生成对应的 SQL 查询语句。
我们使用轻量级的 SQLite 数据库,并接入 DeepSeek 的 API 来完成自然语言理解与 SQL 生成任务。
import sqlite3
# 打开链接
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS employees(
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary INTEGER
)
""")
sample_data = [ (6, "王五", "开发部", 32000), (7, "张三", "销售部", 20000), (8, "老六", "开发部", 33000), (9, "李四", "销售部", 15000)]
cursor.executemany("INSERT INTO employees VALUES(?,?,?,?)", sample_data)
conn.commit()
为了让 LLM 理解表结构,我们需要把表的 schema 提供给模型:
# 通过 table_info 拿到 employees 表的描述
schema = cursor.execute("PRAGMA table_info(employees)").fetchall()
schema_str = "CREATE TABLE EMPLOYEES (n" + "n".join([f"{col[1]} {col[2]}" for col in schema]) + "n)"
print("数据库Schema:")
print(schema_str)
输出结果类似:
CREATE TABLE EMPLOYEES (
id INTEGER
name TEXT
department TEXT
salary INTEGER
)
现在,我们调用 DeepSeek 的 API,让模型根据自然语言生成 SQL 查询。
from openai import OpenAI
client = OpenAI(
api_key='',//这里写入自己的apikey
base_url='https://api.deepseek.com/v1'
)
def ask_deepseek(query, schema):
prompt = f"""这是一个数据库的Schema:
{schema}
根据这个Schema,你能输出一个SQL查询来回答以下问题吗?
只输出SQL查询,不要输出任何内容,也不要带任何格式。
问题:{query}
"""
response = client.chat_completions.create(
model="deepseek-reasoner",
max_tokens=2048,
messages=[
{"role": "user", "content": prompt}
]
)
return response.choices[0].message.content
# 示例提问
question = "开发部门员工的姓名和工资是多少?"
sql = ask_deepseek(question, schema_str)
print("生成的sql查询:")
print(sql)
运行上述代码后,你可能会得到如下 SQL 查询:
SELECT name, salary FROM employees WHERE department = '开发部';
| 特性 | 说明 |
|---|---|
| 自然语言 → SQL | 利用 LLM 的理解能力,无需人工编写复杂查询 |
| Schema 上下文注入 | 让模型知道表结构,避免误读字段名 |
| 轻量级部署 | 使用 SQLite,无需复杂数据库环境 |
| 可扩展性强 | 可轻松接入其他数据库或前端界面 |
通过本次实践,我们展示了如何利用 llm,结合 SQLite 数据库,构建一个简单却强大的“自然语言转 SQL”系统。整个流程清晰、易于复现,适合初学者上手,也具备实际应用价值。