当前位置: 首页 > article >正文

使用Dify访问数据库(mysql)

1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。

#sql_tools.py

from flask import Flask, request, jsonify
import mysql.connector

# 数据库连接配置
config = {
    'user': 'your_username',
    'password': 'your_password',
    'host': 'localhost',
    'database': 'your_database',
    'raise_on_warnings': True
}

# 初始化Flask应用
app = Flask(__name__)

# 连接数据库
def connect_to_database():
    try:
        conn = mysql.connector.connect(**config)
        print("Connected to MySQL database")
        return conn
    except mysql.connector.Error as err:
        print(f"Error: {err}")
        return None

# 执行SQL查询
def execute_query(conn, sql):
    cursor = conn.cursor()
    try:
        cursor.execute(sql)
        if sql.strip().lower().startswith("select"):
            # 如果是查询操作,返回结果
            result = cursor.fetchall()
            return result
        else:
            # 如果是插入、更新、删除操作,提交事务并返回受影响的行数
            conn.commit()
            return cursor.rowcount
    except mysql.connector.Error as err:
        print(f"Error executing SQL: {err}")
        return None
    finally:
        cursor.close()

# HTTP接口:执行SQL
@app.route('/execute', methods=['POST'])
def execute_sql():
    # 获取请求中的SQL语句
    data = request.json
    if not data or 'sql' not in data:
        return jsonify({"error": "SQL statement is required"}), 400

    sql = data['sql']
    conn = connect_to_database()
    if not conn:
        return jsonify({"error": "Failed to connect to database"}), 500

    # 执行SQL
    result = execute_query(conn, sql)
    conn.close()

    if result is None:
        return jsonify({"error": "Failed to execute SQL"}), 500

    # 返回结果
    return jsonify({"result": result})

# 启动Flask应用
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

2、创建知识库,导入表结构描述。

3、创建数据库访问工作流。

代码执行:


import requests
def main(sql: str) -> dict:
    # 定义API的URL
    url = "https://xxx.ngrok-free.app/execute"

    # 构造请求体
    payload = {
        "sql": sql
    }

    # 发送POST请求
    try:
        response = requests.post(url, json=payload)
    
        # 检查响应状态码
        if response.status_code == 200:
            # 解析响应数据
            result = response.json()
            return {
                "result": f"{result}"
            }
        else:
            return {
                "result": f"请求失败,状态码:{response.status_code},{response.json()}"
            }
    except requests.exceptions.RequestException as e:
        return {
            "result": f"请求异常:{e}"
        }

4、创建数据库智能体


http://www.kler.cn/a/509907.html

相关文章:

  • 【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格
  • 第22篇 基于ARM A9处理器用汇编语言实现中断<四>
  • 【蜂巢——方向,数学】
  • Java 接口安全指南
  • 【视觉惯性SLAM:十七、ORB-SLAM3 中的跟踪流程】
  • js基础---var与let的区别以及const的使用
  • EXCEL+Python搞定数据处理(第一部分:Python入门-第1章:为什么要用Python为Excel编程)
  • matlab函数主要是计算与坐标差相关的矩阵 `xx` 和 `yy` 及其衍生矩阵
  • IDEA2023版中TODO的使用
  • Sentinel配置流控规则详解
  • TinyEngine v2.1版本发布:全新的区块方案和画布通信方案,打造更强力的可拓展低代码引擎
  • MySQL第三次实验
  • 天童美语:培养孩子的业余爱好
  • 深入理解事务:原理与示例代码详解
  • springboot基于安卓的智启教育服务平台app
  • 【C++】list容器
  • KAGGLE竞赛实战2-捷信金融违约预测竞赛-part2-用lightgbm建立baseline
  • pnpm介绍
  • Java进程内缓存介绍
  • 部署启动nacos报错No DataSource set 及master-db not found
  • 智能学习平台系统设计与实现(代码+数据库+LW)
  • 如何用AI优化自动化回归测试
  • 基于 Android 的个人健康管理 APP 设计与实现
  • Linux探秘坊-------3.开发工具详解(1)
  • 物联网网关Web服务器--Boa服务器移植与测试
  • 某国际大型超市电商销售数据分析和可视化