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、创建数据库智能体
总结
到此这篇关于使用dify访问mysql数据库的文章就介绍到这了,更多相关dify访问mysql数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论