AIGC 时代如何“让数据库听懂人话”?从 CRUD 到自然语言 SQL 的进化之旅

AIGC 时代如何“让数据库听懂人话”?从 CRUD 到自然语言 SQL 的进化之旅

引言

“老板,开发部工资多少?”
“我这就查。”

——曾经需要写 SQL 的你,现在只需一句话。

在 AI 大模型(AIGC)席卷一切的时代,连我们最熟悉的 数据库操作 都正在被彻底改变。从前必须手敲 SELECT * FROM employees WHERE department = '开发' 的日子一去不复返了——如今,你只需要说一句:“开发部门员工的姓名和工资是多少?”,AI 就能自动帮你生成正确的 SQL 查询语句!

今天我们就来深入剖析:AIGC 是如何实现自然语言到 SQL 的转换? 并结合一个真实代码案例,带你一步步看懂背后的逻辑与魔法。


案例部署

1. 魔搭部署

登录魔搭社区 魔搭官网,进入 【我的】→【我的Notebook】

启动后点击【查看Notebook】,跳转至如图页面,选择Python 3 

分模块输入代码内容后点击运行,生成 text.db 数据库文件,

 2. 数据库文件 test.db 查看步骤

首次在 VScode 中下载扩展  

按下快捷键(如 Ctrl+Shift+P / Cmd+Shift+P),输入:

SQLite: Open Database

选择 .db 文件

最后按照下图步骤即可查看数据库文件


代码第一步:用 SQLite 搭建本地数据库(无需服务器!)

为什么选 SQLite?因为它简单、高效、无依赖,是微信、浏览器等 App 背后默默工作的本地存储引擎。MySQL 需要服务端部署,而 SQLite 只需一个 .db 文件,完美适配个人项目与原型验证。

代码段 1:导入模块

# 轻量级数据库 import sqlite3 
导入 Python 内置的 sqlite3 模块,用于操作 SQLite 数据库。无需额外安装,开箱即用。

代码段 2:连接数据库 & 创建表

# 打开链接 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 ) """) 
逐句解析sqlite3.connect("test.db"):连接名为 test.db 的数据库文件。若文件不存在,则自动创建。conn.cursor():获取“游标”(cursor),它是执行 SQL 语句的操作句柄,就像数据库的“遥控器”。cursor.execute(...):执行一条 SQL 语句。CREATE TABLE IF NOT EXISTS employees (...):创建一张名为 employees 的表,包含四个字段:id:整数类型,主键(自动递增)name:文本类型,员工姓名department:文本类型,所属部门salary:整数类型,薪资IF NOT EXISTS 确保重复运行不会报错。
关键点:SQLite 是独立于 Web 后端的本地数据库实体,适合离线或轻量场景。

代码段 3:插入测试数据

sample_data = [ (6, "王五", "开发部", 32000), ( 7, "张三", "销售部", 20000), ( 8, "赵六", "开发部", 33000), ( 9, "李四", "销售部", 15000) ] cursor.executemany('INSERT INTO employees VALUES (?, ?, ?, ?)', sample_data) conn.commit() 
逐句解析:定义 sample_data 列表,包含 4 条员工记录(注意 ID 从 6 开始,可能是为了演示非连续主键)。cursor.executemany(...):批量执行插入操作,效率远高于单条循环。'INSERT INTO employees VALUES (?, ?, ?, ?)':使用 ? 作为占位符,防止 SQL 注入攻击,安全又规范。conn.commit()提交事务,确保所有更改永久写入数据库。若不提交,数据会丢失!
这就是经典的 CRUD 中的 “C”(Create)

代码第二步:提取数据库 Schema(给 AI 的“说明书”)

为了让大模型知道“表长什么样”,我们需要提供结构描述(Schema):

# 通过table_info 拿到employees 表的描述 # llm 生成sql 提供上下文 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) 
逐句解析PRAGMA table_info(employees):SQLite 特有命令,返回表的元信息(字段名、类型等)。fetchall():获取所有行结果。构造 schema_str 字符串,模拟标准 CREATE TABLE 语句格式,便于 LLM 理解。

最终输出类似:

CREATE TABLE EMPLOYEES ( id INTEGER name TEXT department TEXT salary INTEGER ) 
💡 为什么需要 Schema?
因为 LLM 不知道你的表叫什么、有哪些字段。提供 Schema 就像给翻译官一本词典,让它能准确“转译”。

代码第三步:调用 DeepSeek 大模型,实现“自然语言 → SQL”

现在进入 AIGC 的核心环节——让 AI 根据你的中文问题,生成可执行的 SQL。

代码段 4:配置 DeepSeek API 客户端

from openai import OpenAI client = OpenAI( api_key='sk-c031736e926b4608ba8603be5750d572', base_url='https://api.deepseek.com/v1' ) 
逐句解析:导入兼容 OpenAI 协议的客户端(DeepSeek 支持该协议)。初始化 client,指定:api_key完全保留原始值(实际使用请替换为自己的密钥!)base_url:指向 DeepSeek 的 API 入口
注意:此 API Key 仅为示例,请勿在公开场合泄露真实密钥!

API Key获取地址DeepSeek 开放平台

代码段 5:定义 AIGC 生成函数(核心魔法!)

def ask_deepseek(query, schema): prompt = f""" 这是一个数据库的Schema: {schema} 根据这个Schema,你能输出一个SQL查询来回答以下问题吗? 只输出SQL查询,不要输出任何内容,也不要带任何格式 问题:{query} """ # print(prompt) response = client.chat.completions.create( model="deepseek-reasoner", max_tokens=2048, messages=[{ "role": "user", "content": prompt }] ) return response.choices[0].message # ask_deepseek("开发部部门员工的姓名和工资是多少?", schema) question = "开发部部门员工的姓名和工资是多少?" sql = ask_deepseek(question, schema_str) print("生成的sql查询:") print(sql) 
1. 函数定义
def ask_deepseek(query, schema): 
接收两个参数:query:用户的自然语言问题(如“开发部...”)schema:数据库结构描述
2. 构造 Prompt(提示词工程的核心!)
prompt = f""" 这是一个数据库的Schema: {schema} 根据这个Schema,你能输出一个SQL查询来回答以下问题吗? 只输出SQL查询,不要输出任何内容,也不要带任何格式 问题:{query} """ 
明确告诉 AI 当前数据库结构强调指令:“只输出 SQL 查询,不要输出任何内容,也不要带任何格式”这种约束极大提升了输出的可用性——避免 AI 添加解释、Markdown 或多余字符
3. 调用大模型 API
response = client.chat.completions.create( model="deepseek-reasoner", max_tokens=2048, messages=[{ "role": "user", "content": prompt }] ) 
使用 deepseek-reasoner 模型(专为逻辑推理优化)设置足够长的 max_tokens,避免截断复杂 SQL以标准 Chat 格式发送请求
4. 返回结果
return response.choices[0].message 
获取 AI 生成的第一条回复内容(即纯 SQL 字符串)
5. 实际调用
question = "开发部部门员工的姓名和工资是多少?" sql = ask_deepseek(question, schema_str) print("生成的sql查询:") print(sql) 
提问关于“开发部”的员工信息打印 AI 生成的 SQL
这就是 AIGC 的魔力:将人类语言(Human Language)翻译成机器语言(SQL),实现 自然语义数据库操作
6. 输出示例
SELECT name, salary FROM employees WHERE department = '开发';

🎉 成功!AI 把中文问题准确地翻译成了标准 SQL!


AIGC 如何“理解”并生成 SQL?

让我们深入看看 AI 是怎么做到这一点的:

1. 上下文感知(Context Awareness)

AI 看到了完整的 Schema,知道:

  • 表名叫 employees
  • 字段有:namedepartmentsalary
  • department 是字符串类型

2. 意图识别(Intent Recognition)

AI 分析问题:“开发部门员工的姓名和工资是多少?”

  • 关键词提取:开发部门 → 对应 department = '开发'
  • 查询目标:姓名和工资 → 对应 name, salary

3. 语法生成(Grammar Generation)

AI 根据 SQL 语法规则,组合出:

SELECT name, salary FROM employees WHERE department = '开发';
🤯 整个过程就像一位“数据库翻译官”:把人的语言翻译成机器能懂的语言。

未来展望:AIGC + 数据库 = 新一代生产力工具

传统方式AIGC 方式
必须记住表名、字段名自动识别字段
容易写错 SQL几乎零错误率
需要调试一键生成

未来的趋势将是:

  • 低代码/无代码平台 中集成 AI SQL 生成器
  • 数据分析人员 无需学习 SQL,也能高效查询
  • 智能助手 可实时回答业务问题(如:“本月销售额最高的产品是哪个?”)

结语:数据库不再高冷,人人都是数据分析师

过去,数据库是程序员的专属领域;
今天,借助 AIGC,任何人都可以用自然语言与数据对话。

🔥 从“写 SQL”到“说中文”
这不是技术的进步,而是认知的解放。

当你下次再问:“开发部工资多少?”时,别忘了——
背后可能正有一个 AI 在默默为你生成 SQL。


附录:

1. 完整可运行代码(Python + DeepSeek)

源码地址:python/text2sql/text2sql.ipynb · Zou/lesson_zp - 码云 - 开源中国

# 轻量级数据库 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() from openai import OpenAI client = OpenAI( api_key='sk-c031736e926b4608ba8603be5750d572', base_url='https://api.deepseek.com/v1' ) # 通过table_info 拿到employees 表的描述 # llm 生成sql 提供上下文 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) def ask_deepseek(query, schema): prompt = f""" 这是一个数据库的Schema: {schema} 根据这个Schema,你能输出一个SQL查询来回答以下问题吗? 只输出SQL查询,不要输出任何内容,也不要带任何格式 问题:{query} """ # print(prompt) response = client.chat.completions.create( model="deepseek-reasoner", max_tokens=2048, messages=[{ "role": "user", "content": prompt }] ) return response.choices[0].message # ask_deepseek("开发部部门员工的姓名和工资是多少?", schema) question = "开发部部门员工的姓名和工资是多少?" sql = ask_deepseek(question, schema_str) print("生成的sql查询:") print(sql)

Read more

Flutter 组件 sse_stream 的适配 鸿蒙Harmony 实战 - 驾驭高性能 Server-Sent Events 流、实现鸿蒙端实时数据推送与长连接保活优化方案

Flutter 组件 sse_stream 的适配 鸿蒙Harmony 实战 - 驾驭高性能 Server-Sent Events 流、实现鸿蒙端实时数据推送与长连接保活优化方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 sse_stream 的适配 鸿蒙Harmony 实战 - 驾驭高性能 Server-Sent Events 流、实现鸿蒙端实时数据推送与长连接保活优化方案 前言 在鸿蒙(OpenHarmony)生态的即时性应用场景中,如金融级实时行情、直播间弹幕以及 AI 模型的流式回复(Streaming Response),我们需要一种比轮询更高效、比 WebSocket 更轻量的数据下发机制。 SSE(Server-Sent Events)作为 HTML5 规范下的长连接利器,以其对 HTTP 协议的完美兼容和自动重连的天生特性,在现代移动开发中大放异彩。 sse_stream 库为 Flutter 提供了精简且强大的 SSE 接入能力。在鸿蒙适配实战中,

By Ne0inhk
从小项目到大型鸿蒙 App 的架构变化

从小项目到大型鸿蒙 App 的架构变化

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

By Ne0inhk
Linux手搓进程池:从原理到实现,手把手教你搞定进程复用

Linux手搓进程池:从原理到实现,手把手教你搞定进程复用

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一、先搞懂:进程池是什么?核心优势有哪些? 二、手搓进程池:分步实现(附完整代码) 步骤1:前期准备——定义任务类型与测试任务 步骤2:实现子进程工作逻辑——任务执行的核心 步骤3:封装Channel类——管理主从进程通信与子进程 步骤4:封装ProcessPool类——进程池核心管理逻辑 步骤5:主函数测试 三、编译运行与结果分析(附Makefile) 四、完整代码展示 五、进阶优化:让进程池更实用 六、常见坑点与注意事项

By Ne0inhk
【AIGC安全】CCF-CV企业交流会直播回顾:探寻AI安全治理,共筑可信AI未来

【AIGC安全】CCF-CV企业交流会直播回顾:探寻AI安全治理,共筑可信AI未来

文章目录 * 一、活动背景:AI技术快速发展与安全治理需求迫切 * 二、论坛内容 * 金耀辉:智能共生时代:平衡生成式AI的创新与风险 * 何延哲:人工智能安全检测评估的逻辑和要点 * 谢洪涛:面向特定人物深度伪造视频的主动防御与被动检测技术 * 郭丰俊:视觉内容安全技术的前沿进展与应用 * 赫然:生成式人工智能安全与治理 * 三、回顾总结 一、活动背景:AI技术快速发展与安全治理需求迫切 随着人工智能(AI)技术的迅猛进步,尤其是以ChatGPT为代表的大型语言模型技术的兴起,AI技术已广泛渗透至各个领域。然而,AI技术的快速发展亦伴随着一系列安全隐患的出现,如数据安全、知识产权、算法偏见、有害内容生成以及深度伪造、AI诈骗等。这些问题不仅引起了公众的广泛关注和深切忧虑,也对AI技术的健康发展和社会的和谐稳定构成了潜在威胁。全国网络安全标准化技术委员会等机构亦发布了相关框架和指导原则,旨在规范AI技术的发展和应用,降低其潜在风险。同时,学术界和工业界也在积极探索AI安全治理的途径,从立法、监管、前沿研究、技术实践等多个层面出发,寻求

By Ne0inhk