目录

一、创建数据库

1.1 创建连接

1.2 新建数据库

1.3 创建表

1.4 查看创建表 

1.5 执行代码

 二、构建SQL模拟数据

2.1 数据结构(表设计)

2.2  插入一些示例数据

2.3 构建查询SQL数据执行代码

2.4 复制查询 


 作用概括

这段代码基于 LangChain 框架,实现了用自然语言查询 MySQL 数据库的功能。用户只需输入中文问题,LangChain 会自动将其转为 SQL 查询,并返回结果。


 

一、创建数据库

选用数据库:Navicat for MySQL

1.1 创建连接

 


1.2 新建数据库


1.3 创建表

创建命令:

CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

 


1.4 查看创建表 


1.5 执行代码

from langchain_community.utilities import SQLDatabase

# 连接 sqlite 数据库
# db = SQLDatabase.from_uri("sqlite:///demo.db")

# 连接 MySQL 数据库
db_user = "root"
db_password = "123456"
db_host = "127.0.0.1"
db_port = "3306"
db_name = "llm"
db = SQLDatabase.from_uri(
    f"mysql+pymysql://{db_user}:
    {db_password}@{db_host}:
    {db_port}/{db_name}"
)

print("那种数据库:",db.dialect)
print("获取数据表:",db.get_usable_table_names())
# 执行查询
res = db.run("SELECT count(*) FROM students;")
print("查询结果:",res)

运行结果

那种数据库: mysql
获取数据表: ['students']
查询结果: [(0,)]

 二、构建SQL模拟数据

2.1 数据结构(表设计)

 

1. students 表(学生信息表)

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    class_name VARCHAR(50)
);

2. scores 表(成绩表)

CREATE TABLE scores (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT,
    subject VARCHAR(50),
    score FLOAT,
    FOREIGN KEY (student_id) REFERENCES students(id)
);

 

 


2.2  插入一些示例数据

 

 

执行代码 

-- 插入学生
INSERT INTO students (name, class_name) VALUES 
('张三', '一班'),
('李四', '一班'),
('王五', '二班');

-- 插入成绩
INSERT INTO scores (student_id, subject, score) VALUES 
(1, '数学', 88.5),
(2, '数学', 92.0),
(3, '数学', 75.0),
(1, '语文', 80.0),
(2, '语文', 85.5),
(3, '语文', 78.0);

 


2.3 构建查询SQL数据执行代码

from dotenv import load_dotenv
load_dotenv()
from langchain_community.utilities import SQLDatabase

# 连接 sqlite 数据库
# db = SQLDatabase.from_uri("sqlite:///demo.db")

# 连接 MySQL 数据库
db_user = "root"
db_password = "123456"
db_host = "127.0.0.1"
db_port = "3306"
db_name = "llm"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")

from langchain_openai import ChatOpenAI
from langchain.chains import create_sql_query_chain
# 初始化大模型
llm = ChatOpenAI(model="gpt-4", temperature=0)

chain = create_sql_query_chain(llm=llm, db=db)


#response = chain.invoke({"question": "查询考试科目一共有多少?"})
response = chain.invoke({"question": "查询一班的学生数学成绩是多少?"})
# 限制使用的表
# response = chain.invoke({"question": "一共有多少个学生?", "table_names_to_use": ["students"]})
print(response)

运行结果

```sql
SELECT `students`.`name`, `scores`.`score`
FROM `scores`
JOIN `students` ON `scores`.`student_id` = `students`.`id`
WHERE `students`.`class_name` = '一班' AND `scores`.`subject` = '数学'
LIMIT 5;
```

复制该结果到sql的命令窗口执行 


2.4 复制查询 


 三、模块功能说明

  1. 加载环境变量

    from dotenv import load_dotenv
    load_dotenv()
    

    ✅ 加载 .env 文件中的环境变量(如 API 密钥)。

  2. 连接 MySQL 数据库

    from langchain_community.utilities import SQLDatabase
    db = SQLDatabase.from_uri("mysql+pymysql://root:123456@127.0.0.1:3306/llm")
    

    ✅ 使用 LangChain 的 SQLDatabase 工具连接本地 MySQL 数据库 llm。

  3. 初始化语言模型

    from langchain_openai import ChatOpenAI
    llm = ChatOpenAI(model="gpt-4", temperature=0)
    

    ✅ 使用 OpenAI 的 GPT-4 模型,用于生成 SQL 语句。

  4. 创建 SQL 查询链

    from langchain.chains import create_sql_query_chain
    chain = create_sql_query_chain(llm=llm, db=db)
    

    ✅ 将大模型与数据库绑定,创建自然语言到 SQL 的转化链。

  5. 执行自然语言查询

    response = chain.invoke({"question": "查询一班的学生数学成绩是多少?"})
    print(response)
    

    ✅ 输入中文问题,让模型自动生成 SQL 语句并执行,返回结果。


四、你可以查询的内容示例

  • 一班的数学成绩

  • 学生总数

  • 张三的语文成绩

  • 所有班级的平均分


五、总结一句话

📊「这段代码通过 LangChain + OpenAI 实现了一个智能数据库问答系统,用户输入中文问题,模型自动翻译成 SQL 并执行查询。」

更多推荐