当地摆设使用deepSeek自己天生sql 自动连接mysql自动执行sql得到效果后天生 ...

打印 上一主题 下一主题

主题 1577|帖子 1577|积分 4731

先看我弄好的效果 

我的数据库表 三个表  一个用户 一个角色表 一个用户角色关联表








输入:统计本月各种角色注册数量


它最终给的网站地址 打开的效果:


它天生的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效果
  1. //数据库配置文件
  2. module.exports  = {
  3.   host: 'localhost',
  4.   user: 'root',
  5.   password: 'root',
  6.   database: 'ry-vue',
  7.   port: 3306,
  8.   dialect: 'mysql'
  9. };
复制代码
  1. // app.js  
  2. const express = require('express');
  3. const bodyParser = require('body-parser');
  4. const cors = require('cors');
  5. const mysql = require('mysql2/promise'); // 使用Promise接口
  6. const dbConfig = require('./config/db');
  7. const app = express();
  8. app.use(bodyParser.json());
  9. app.use(cors());
  10. // 配置MySQL连接池(推荐)
  11. const pool = mysql.createPool({
  12.   host: dbConfig.host,
  13.   port: dbConfig.port,
  14.   user: dbConfig.user,
  15.   password: dbConfig.password,
  16.   database: dbConfig.database,
  17.   waitForConnections: true,
  18.   connectionLimit: 10,
  19.   queueLimit: 0,
  20.   ssl: { rejectUnauthorized: false } // MySQL 8.0可能需要SSL配置
  21. });
  22. // API端点
  23. const allowedSQLOperations = ['SELECT', 'SHOW']; // 仅允许查询操作
  24. app.post('/execute-sql', async (req, res) => {
  25.   try {
  26.     //const { sql } = req.body;
  27.     const sql = req.body.sql.trim().toUpperCase();
  28.     const token = req.body.token;
  29.     // 基础token校验(生产环境需加强)
  30.     if (!token || typeof token !== 'string') {
  31.       return res.status(400).json({ error: 'Invalid token statement' });
  32.     }
  33.     // 基础SQL校验(生产环境需加强)
  34.     if (!sql || typeof sql !== 'string') {
  35.       return res.status(400).json({ error: 'Invalid SQL statement' });
  36.     }
  37.     if (!allowedSQLOperations.some(op => sql.startsWith(op))) {
  38.       return res.status(403).json({ error: 'Operation not allowed' });
  39.     }
  40.     const connection = await pool.getConnection();
  41.     try {
  42.       console.log('执行的SQL:', sql);
  43.       const [results] = await connection.query(sql);
  44.       console.log('SQL 执行结果:', results);
  45.       res.json({
  46.         success: true,
  47.         data: results,
  48.         meta: {
  49.           affectedRows: results.affectedRows,
  50.           insertId: results.insertId
  51.         }
  52.       });
  53.     } finally {
  54.       connection.release();  // 释放连接回连接池
  55.     }
  56.   } catch (error) {
  57.     console.error('SQL  Error:', error);
  58.     res.status(500).json({
  59.       success: false,
  60.       error: {
  61.         code: error.code,
  62.         message: error.sqlMessage || error.message
  63.       }
  64.     });
  65.   }
  66. });
  67. // 启动服务
  68. const PORT = 3000;
  69. app.listen(PORT, () => {
  70.   console.log(`API 服务已启动:http://localhost:${PORT}`);
  71. });
复制代码

  1. //用于将生成的html代码生成html文件生成访问地址
  2. const express = require('express');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const app = express();
  6. const port = 3001;
  7. // 解析 JSON 格式的请求体
  8. app.use(express.json());  
  9. // 处理 POST 请求
  10. app.post('/create-html',  (req, res) => {
  11.     // 从请求体中获取 HTML 代码
  12.     var htmlCode = req.body.html;  
  13.      htmlCode = htmlCode.replace(/#XP#/g,  '"');
  14.     if (!htmlCode) {
  15.         return res.status(400).send(' 请提供有效的 HTML 代码');
  16.     }
  17.     // 生成一个唯一的文件名
  18.     const fileName = `generated-${Date.now()}.html`;  
  19.     const filePath = path.join(__dirname,  'html-files', fileName);
  20.     // 创建保存 HTML 文件的目录(如果不存在)
  21.     const dir = path.dirname(filePath);  
  22.     if (!fs.existsSync(dir))  {
  23.         fs.mkdirSync(dir,  { recursive: true });
  24.     }
  25.     // 将 HTML 代码写入文件
  26.     fs.writeFile(filePath,  htmlCode, (err) => {
  27.         if (err) {
  28.             console.error(err);  
  29.             return res.status(500).send(' 保存 HTML 文件时出错');
  30.         }
  31.         // 返回文件路径
  32.         const fileUrl = `http://10.10.7.196:3001/html-files/${fileName}`;
  33.         res.status(200).send(`网站已经生成地址是:${fileUrl}`);
  34.     });
  35. });
  36. // 静态文件服务,用于提供生成的 HTML 文件
  37. app.use('/html-files',  express.static(path.join(__dirname,  'html-files')));
  38. // 启动服务器
  39. app.listen(port,  () => {
  40.     console.log(` 服务器运行在 http://localhost:${port}`);
  41. });
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表