写 SQL 太累?用 Python 做个能听懂人话、自动写 SQL 的数据库 Agent

50 阅读6分钟

别再说 SQL 难写,未来数据库都能听懂人话了。

写 SQL 这件事吧……
就像谈一段感情:

  • 你以为很简单
  • 写着写着就迷路
  • WHERE 写错对象
  • JOIN 连不上关系
  • DELETE 一不小心把对方全删了

而且程序员最痛苦的不是写 SQL,是:

你明明说的是人话,为什么数据库听不懂?

比如你说:

  • “把销售部工资超过 6 万的员工查一下”
  • “删掉市场部那个叫黄仁勋的人”
  • “新增一个叫张三的销售”

数据库冷冷回应:

❌ 报错:你得给我写 SQL,我听不懂你说的。


于是,我决定干一件非常爽的事:

让数据库听懂人话。是真的听懂。

只要你说一句自然语言,它就能自动:

  1. 理解你的意图
  2. 生成 SQL
  3. 自动执行 SQL
  4. 把结果交给你

你不需要写 SQL,一个字都不用。

现在 SQL 的地位成了:

“数据库的底层语言,而不是人类要写的语言。”


✨ 一、我们要做一个什么样的 Agent?

一句话:

你说人话 → LLM 变 SQL → Python 执行 → 返回结果

流程图长这样(你自行脑补彩色、带渐变背景的那种掘金风):

🧑 用户:我想查点东西
   ↓
🧠 DeepSeek:懂了,我来写 SQL
   ↓
🗄️ SQLite:SQL 已执行完毕
   ↓
📤 Python:老板,这是结果

是不是很像你雇了个博士后站你旁边?
你一句“查一下工资最高的工程师是谁”,
博士后立刻写出:

SELECT name FROM employees
WHERE department='工程'
ORDER BY salary DESC LIMIT 1;

然后贴心地帮你执行。

这个世界最强的不是程序员,而是能让 AI 给自己写 SQL 的程序员。


✨ 二、为什么我要做这个东西?

首先不是因为我懒。
是因为数据库太不“人性化”了。

你想想,现在都 2025 年了:

  • 车能自动驾驶
  • 手机能自动同步
  • AI 能写论文
  • 小孩都能用语音点歌

但数据库还是停留在:

“你得写我能看懂的语句。”

太老派了。

更重要是:

🚀 Text2SQL 是 2025 年最接地气、最能落地的 LLM 应用之一

你让它写诗、写小说、画画?好玩,但不刚需。
你让它写 SQL?爽、实用、能立即商业化。

于是,我决定做一个:

“可以听人话操作数据库的 Agent”

这个 Agent 能帮我们:

  • 查数据
  • 删数据
  • 增加数据
  • 更新数据
  • 甚至查异常、做报表、写分析

而你只需要——说一句人话。


✨ 三、先用 Python 搭一个小数据库(练练手)

先来点演示用的小数据。
我们用 SQLite 创建一个“员工表”:

from openai import OpenAI
import sqlite3

client = OpenAI(
    api_key='YOUR API KEY',
    base_url='https://api.deepseek.com/v1'
)

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, "黄佳", "销售", 50000),
    (7, "宁宁", "工程", 75000),
    (8, "谦谦", "销售", 60000),
    (9, "悦悦", "工程", 80000),
    (10, "黄仁勋", "市场", 55000),
    (11, "白兰地", "工程", 80000)
]

cursor.executemany(
    "INSERT INTO employees VALUES(?,?,?,?)",
    sample_data
)
conn.commit()

这下我们的“模拟公司”有了员工、有了部门、有了工资。

准备好被 Agent 管理吧!


✨ 四、让 LLM 认识数据库 —— 给它 Schema

LLM 再聪明,也不会读心术。
你得告诉它数据库长啥样:

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)"

得到:

CREATE TABLE EMPLOYEES (
id INTEGER
name TEXT
department TEXT
salary INTEGER
)

这就是它理解 SQL 的基础。

没有 schema 的 Text2SQL = 你让我写论文,但不给我题目。


✨ 五、核心函数:自然语言 → SQL

这个函数是整个系统的灵魂:

def ask_deepseek(query, schema):
    prompt = f"""
    这是一个数据库的Schema:
    {schema}
    根据这个Schema,请输出一个SQL查询来回答以下问题。
    只输出SQL查询语句本身,不要包含任何解释。
    问题:{query}
    """

    response = client.chat.completions.create(
        model="deepseek-chat",
        max_tokens=2048,
        messages=[{"role": "user", "content": prompt}],
        temperature=0
    )
    return response.choices[0].message.content

它负责:

  • 理解你的自然语言
  • 解析意图
  • 自动生成合法 SQL
  • 不解释、不啰嗦、不多话

非常听话的小助手。


✨ 六、爽到尖叫!实测体验

这里是你真正感受到“未来到了”的部分。


☑ 示例 1:新增员工

你说:

“在销售部门增加一个新员工,姓名为张三,工资为45000”

模型居然写出:

INSERT INTO employees (name, department, salary)
VALUES ('张三', '销售', 45000);

并亲自执行。

你甚至都不用敲分号!


☑ 示例 2:删除员工

你说:

“删除市场部门的黄仁勋”

模型直接:

DELETE FROM employees
WHERE name='黄仁勋' AND department='市场';

⚠️ 是真的会删
⚠️ 不要对生产库说气话
⚠️ 它不会按你“只是说说”的态度办事


☑ 示例 3:查询员工

“查询所有员工的信息”

得到:

SELECT * FROM employees;

输出:

[(6, '黄佳', '销售', 50000), (7, '宁宁', '工程', 75000), ...]

它的准确率比某些实习生还高。


✨ 七、等等,这其实是一个非常强的系统雏形

你可能以为这是个好玩的项目?
不,这其实是:

未来 5 年所有数据系统的标准能力。

它的潜力包括:


🔥 ① 人人都能查数据(不需要会 SQL)

产品、运营、市场、老板……

一句话查数据,不用找你帮忙,也不用等 BI 出报表。

你终于可以摆脱:

  • “帮我查下昨天的访问量”
  • “帮我跑下这个 SQL”
  • “帮我查下订单数”
  • “再麻烦你查一下……”

🔥 ② 程序员更专注业务,不写重复 SQL

你有没有写过这种代码:

SELECT * FROM employees;
SELECT * FROM employees WHERE id=?
SELECT * FROM employees WHERE department=?

写得你都怀疑人生。

现在?
模型帮你写!


🔥 ③ 能接入更多能力:权限、风控、自动分析

你可以扩展:

  • 自动 SQL 风险检测
  • 自动添加 WHERE 防止全表更新
  • 自动生成分析报告
  • 多表 join 生成器
  • 自动绘图 BI

甚至可以做一个:

“你的 AI 数据分析师”


🔥 ④ 这已经是 LLM 落地最成熟的方向之一

Text2SQL 的商业价值极高:

  • 数据治理
  • 数据看板
  • CRM
  • ERP
  • RPA 自动化

哪儿有数据,哪儿就能落地。

你这个项目,是一个完整的 MVP。


🎉 八、结语:未来数据库的接口,就是自然语言

这个小项目告诉我们一个事实:

数据库不是不会听人话,只是以前没人教它。
现在模型替我们补上了这一课。

未来你给数据库下指令,不需要:

  • GUI
  • SQL
  • ORM
  • 数据库文档
  • 字段说明书

你只需要一句:

“查下本月销售额最高的业务员。”

数据库会乖乖告诉你。

技术的未来不是更复杂,而是更自然。
越贴近人类的表达,就越强大。