本地部署使用deepSeek自己生成sql 自动连接mysql自动执行sql得到结果后生成大屏统计表教程一气呵成 后续使用无需一行代码
先看我弄好的效果
我的数据库表 三个表 一个用户 一个角色表 一个用户角色关联表


输入:统计本月各种角色注册数量
它最终给的网站地址 打开的效果:

它生成的sql
SELECT r.role_id, r.role_name, COUNT(DISTINCT ur.user_id) AS count FROM sys_role r LEFT JOIN sys_user_role ur ON r.role_id = ur.role_id LEFT JOIN sys_user u ON ur.user_id = u.user_id WHERE u.create_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND u.create_time < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01') AND u.del_flag = '0' AND r.status = '0' GROUP BY r.role_id, r.role_name ORDER BY r.role_sort;
然后自动调用API执行的结果


最后自动根据 json SQL 执行结果: [
{ ROLE_NAME: '超级管理员', REGISTER_COUNT: 1 },
{ ROLE_NAME: '普通客户', REGISTER_COUNT: 3 }
]生成网站如图

附带表格效果

所需要准备
1.本地搭建dify
2.ollama 拉取 deepseek -R1至少14B以上版本体验才够好
3.准备两个api (我是让AI直接给我生成的nodejs服务端)一个用于执行AI生成的sql 执行后返回json结果 一个用于将AI生成的html代码生成html文件生成网站
流程大致说明:
使用dify创建工作流
1.开始: 准备两个变量 你的描述 和你要生成的类型 表格代码 还是生成统计图

2.将mysql表结构给到deepseek 加入你的描述


3.提取ds生成的sql文件 拿到后请求API执行


4.接下来创建条件判断 是否查到数据 查到继续调用ds 将内容生成html代码

这次 你选择的类型就有用了

提取html代码 将特殊符号转换

调用API生成网站

输出结果

两个API如下: app.js用于执行AI生成的sql 然后返回json结果
//数据库配置文件
module.exports = {
host: 'localhost',
user: 'root',
password: 'root',
database: 'ry-vue',
port: 3306,
dialect: 'mysql'
};
// app.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const mysql = require('mysql2/promise'); // 使用Promise接口
const dbConfig = require('./config/db');
const app = express();
app.use(bodyParser.json());
app.use(cors());
// 配置MySQL连接池(推荐)
const pool = mysql.createPool({
host: dbConfig.host,
port: dbConfig.port,
user: dbConfig.user,
password: dbConfig.password,
database: dbConfig.database,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
ssl: { rejectUnauthorized: false } // MySQL 8.0可能需要SSL配置
});
// API端点
const allowedSQLOperations = ['SELECT', 'SHOW']; // 仅允许查询操作
app.post('/execute-sql', async (req, res) => {
try {
//const { sql } = req.body;
const sql = req.body.sql.trim().toUpperCase();
const token = req.body.token;
// 基础token校验(生产环境需加强)
if (!token || typeof token !== 'string') {
return res.status(400).json({ error: 'Invalid token statement' });
}
// 基础SQL校验(生产环境需加强)
if (!sql || typeof sql !== 'string') {
return res.status(400).json({ error: 'Invalid SQL statement' });
}
if (!allowedSQLOperations.some(op => sql.startsWith(op))) {
return res.status(403).json({ error: 'Operation not allowed' });
}
const connection = await pool.getConnection();
try {
console.log('执行的SQL:', sql);
const [results] = await connection.query(sql);
console.log('SQL 执行结果:', results);
res.json({
success: true,
data: results,
meta: {
affectedRows: results.affectedRows,
insertId: results.insertId
}
});
} finally {
connection.release(); // 释放连接回连接池
}
} catch (error) {
console.error('SQL Error:', error);
res.status(500).json({
success: false,
error: {
code: error.code,
message: error.sqlMessage || error.message
}
});
}
});
// 启动服务
const PORT = 3000;
app.listen(PORT, () => {
console.log(`API 服务已启动:http://localhost:${PORT}`);
});
//用于将生成的html代码生成html文件生成访问地址
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const port = 3001;
// 解析 JSON 格式的请求体
app.use(express.json());
// 处理 POST 请求
app.post('/create-html', (req, res) => {
// 从请求体中获取 HTML 代码
var htmlCode = req.body.html;
htmlCode = htmlCode.replace(/#XP#/g, '"');
if (!htmlCode) {
return res.status(400).send(' 请提供有效的 HTML 代码');
}
// 生成一个唯一的文件名
const fileName = `generated-${Date.now()}.html`;
const filePath = path.join(__dirname, 'html-files', fileName);
// 创建保存 HTML 文件的目录(如果不存在)
const dir = path.dirname(filePath);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
// 将 HTML 代码写入文件
fs.writeFile(filePath, htmlCode, (err) => {
if (err) {
console.error(err);
return res.status(500).send(' 保存 HTML 文件时出错');
}
// 返回文件路径
const fileUrl = `http://10.10.7.196:3001/html-files/${fileName}`;
res.status(200).send(`网站已经生成地址是:${fileUrl}`);
});
});
// 静态文件服务,用于提供生成的 HTML 文件
app.use('/html-files', express.static(path.join(__dirname, 'html-files')));
// 启动服务器
app.listen(port, () => {
console.log(` 服务器运行在 http://localhost:${port}`);
});
更多推荐





所有评论(0)