暂无图片
暂无图片
11
暂无图片
暂无图片
暂无图片

Oracle+Deepseek+Dify 实现数据库数据实时分析

623

介绍

Oracle‌作为全球领先的关系型数据库管理系统(RDBMS),提供高效、安全的企业级数据存储与管理能力,支持复杂查询、事务处理和大规模数据分析,尤其适用于结构化数据的处理。

‌DeepSeek‌高性能大语言模型(如 DeepSeek-R1 版本),擅长自然语言处理、代码生成、逻辑推理等任务,支持多轮对话和复杂分析场景,可通过 API 或本地化部署灵活调用。

‌Dify‌开源低代码 AI 应用开发平台,支持快速构建基于大模型(如 DeepSeek)的智能化工作流,提供数据接入、模型集成、可视化编排等功能,降低 AI 应用开发门槛。

通过整合 ‌Oracle‌ 的数据管理能力、‌DeepSeek‌ 的智能分析能力以及 ‌Dify‌ 的工作流自动化能力,可实现以下典型应用:

  • ‌(1)自动化数据处理与分析流程

  • ‌(2)自然语言驱动的数据查询与交互

  • ‌(3)私有化部署与安全增强

下面简单实践下自动化数据处理与分析的功能使用。

实践过程

Oracle准备测试数据

在ubicewow 用户创建测试订单表orders,并写入200条数据

SQL> conn ubicewow/ubicewow
Connected.

SQL> desc orders
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 ORDER_ID                                                                                                          NOT NULL NUMBER(10)
 CUSTOMER_ID                                                                                                       NOT NULL NUMBER(10)
 ORDER_DATE                                                                                                                 DATE
 TOTAL_AMOUNT                                                                                                               NUMBER(12,2)
 STATUS                                                                                                                     VARCHAR2(20)
 CREATE_TIME                                                                                                                TIMESTAMP(6)


SQL> set linesize 200
SQL> /

  ORDER_ID CUSTOMER_ID ORDER_DATE          TOTAL_AMOUNT STATUS               CREATE_TIME
---------- ----------- ------------------- ------------ -------------------- ---------------------------------------------------------------------------
      1164         213 2025-02-04 01:42:12      5392.55 UNPAID               27-FEB-25 02.51.37.496726 PM
      1165         288 2025-01-01 14:45:25      4979.62 PAID                 27-FEB-25 02.51.37.496844 PM
      1166         243 2025-01-17 20:47:56      1478.69 SHIPPED              27-FEB-25 02.51.37.497028 PM
      1167         254 2025-02-13 21:34:43      6788.27 COMPLETED            27-FEB-25 02.51.37.497118 PM
复制

python实现数据抽取接口

通过dify的工作流,可以实现http的post请求,通过python脚本,实现暴露8000端口,并通过访问API实现数据返回。

代码如下:

[root@pcllm ~]# cat Getdata.py 
from flask import Flask, request, jsonify
import cx_Oracle as orcl
import os

# 从Dify环境变量读取配置(密码脱敏)
app = Flask(__name__)
#tnsnamy = orcl.makedsn('192.168.20.242', '1521', 'three')
#db = orcl.connect('ubicewow', 'ubicewow', tnsname)

@app.route('/query', methods=['POST'])
def query_orders(days=7):
    """查询最近N天订单并格式化输出"""
    tnsname = orcl.makedsn('192.168.20.242', '1521', 'three')
    db = orcl.connect('ubicewow', 'ubicewow', tnsname)
    sql = """
        SELECT 
            order_id,           -- 订单ID
            customer_id,        -- 客户ID
            TO_CHAR(order_date, 'YYYY-MM-DD HH24:MI') ordertime,  -- 下单日期
            total_amount,       -- 订单金额
            status              -- 状态
        FROM orders
        WHERE order_date >= TRUNC(SYSDATE) - :days
        ORDER BY order_date DESC
    """
    
    try:
            cursor = db.cursor()
            cursor.execute(sql, [days])
            #result = cursor.fetchall()
            # 输出表头
            print("【订单】ID | 客户ID | 下单时间         | 金额       | 状态")
            print("-" * 65)
            dis_str = '-'
            # 格式化每行数据
            for row in cursor:
                order_id, cust_id, order_time, amount, status = row
                print(
                    f"【订单】ID {order_id:<6} | "
                    f"客户 {cust_id:<6} | "
                    f"时间 {order_time} | "
                    f"金额 ¥{amount:>8.2f} | "
                    f"{status}"
                )
                dis_str = f"【订单】ID {order_id:<6} |" + f"客户 {cust_id:<6} |" + f"时间 {order_time} |"+ f"金额 ¥{amount:>8.2f} | "+ f"{status}" +"\n" + dis_str 
               
            return dis_str, 200
                
    except orcl.Error as e:
        print(f"数据库操作失败: {str(e)}")
def generate_markdown_table(results):
    """ 生成 Markdown 表格 """
    if not results:
        return""
    # 获取列名
    columns = results[0].keys()
    
    # 表头
    table_md = "| " + " | ".join([col for col in columns]) + " |\n"
    # 分隔线
    table_md += "| " + " --- |" * len(columns) + "\n"
    
    # 表格内容
    for row in results:
        table_md += "| " + " | ".join([str(cell) for cell in row.values()]) + " |\n"
    
    return table_md
if __name__ == "__main__":
    app.run(host='192.168.20.254', port=8000)
复制

脚本测试:

1、运行python脚本

[root@pcllm ~]# python3 Getdata.py 
 * Serving Flask app 'Getdata'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://192.168.20.254:8000
Press CTRL+C to quit

复制

2、在其他窗口访问API,这里使用curl模拟,可以看到已经获取到数据

[root@pcllm ~]# curl -X POST http://192.168.20.254:8000/query
【订单】ID 1181   |客户 226    |时间 2025-02-24 00:38 |金额 ¥ 2603.51 | PAID
【订单】ID 1111   |客户 284    |时间 2025-02-24 01:01 |金额 ¥ 7128.36 | COMPLETED
【订单】ID 1090   |客户 267    |时间 2025-02-24 02:10 |金额 ¥ 6632.32 | SHIPPED
【订单】ID 1063   |客户 225    |时间 2025-02-24 12:25 |金额 ¥  479.50 | COMPLETED
【订单】ID 1010   |客户 222    |时间 2025-02-24 13:23 |金额 ¥ 8685.75 | SHIPPED
【订单】ID 1193   |客户 270    |时间 2025-02-24 14:25 |金额 ¥ 2357.28 | PAID
【订单】ID 1045   |客户 294    |时间 2025-02-24 17:20 |金额 ¥ 5753.74 | PAID
【订单】ID 1175   |客户 260    |时间 2025-02-24 19:27 |金额 ¥ 8925.54 | COMPLETED
【订单】ID 1119   |客户 262    |时间 2025-02-24 22:59 |金额 ¥ 8623.45 | COMPLETED
【订单】ID 1052   |客户 279    |时间 2025-02-25 08:57 |金额 ¥ 2579.40 | UNPAID
【订单】ID 1159   |客户 208    |时间 2025-02-25 12:17 |金额 ¥  274.55 | COMPLETED
【订单】ID 1155   |客户 239    |时间 2025-02-25 13:00 |金额 ¥  503.82 | COMPLETED
【订单】ID 1168   |客户 264    |时间 2025-02-25 15:08 |金额 ¥ 9269.99 | UNPAID
【订单】ID 1200   |客户 226    |时间 2025-02-25 17:50 |金额 ¥ 8271.18 | UNPAID
【订单】ID 1120   |客户 208    |时间 2025-02-25 18:11 |金额 ¥ 7379.52 | UNPAID
【订单】ID 1011   |客户 248    |时间 2025-02-25 20:04 |金额 ¥  828.47 | COMPLETED
【订单】ID 1080   |客户 211    |时间 2025-02-26 09:13 |金额 ¥ 4598.25 | UNPAID
【订单】ID 1075   |客户 264    |时间 2025-02-26 10:12 |金额 ¥ 4271.33 | COMPLETED
【订单】ID 1043   |客户 249    |时间 2025-02-26 12:00 |金额 ¥ 8298.23 | COMPLETED
复制

3、python脚本接受访问输出

[root@pcllm ~]# python3 Getdata.py 
 * Serving Flask app 'Getdata'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://192.168.20.254:8000
Press CTRL+C to quit
【订单】ID | 客户ID | 下单时间         | 金额       | 状态
-----------------------------------------------------------------
【订单】ID 1043   | 客户 249    | 时间 2025-02-26 12:00 | 金额 ¥ 8298.23 | COMPLETED
【订单】ID 1075   | 客户 264    | 时间 2025-02-26 10:12 | 金额 ¥ 4271.33 | COMPLETED
【订单】ID 1080   | 客户 211    | 时间 2025-02-26 09:13 | 金额 ¥ 4598.25 | UNPAID
【订单】ID 1011   | 客户 248    | 时间 2025-02-25 20:04 | 金额 ¥  828.47 | COMPLETED
【订单】ID 1120   | 客户 208    | 时间 2025-02-25 18:11 | 金额 ¥ 7379.52 | UNPAID
【订单】ID 1200   | 客户 226    | 时间 2025-02-25 17:50 | 金额 ¥ 8271.18 | UNPAID
【订单】ID 1168   | 客户 264    | 时间 2025-02-25 15:08 | 金额 ¥ 9269.99 | UNPAID
【订单】ID 1155   | 客户 239    | 时间 2025-02-25 13:00 | 金额 ¥  503.82 | COMPLETED
【订单】ID 1159   | 客户 208    | 时间 2025-02-25 12:17 | 金额 ¥  274.55 | COMPLETED
【订单】ID 1052   | 客户 279    | 时间 2025-02-25 08:57 | 金额 ¥ 2579.40 | UNPAID
【订单】ID 1119   | 客户 262    | 时间 2025-02-24 22:59 | 金额 ¥ 8623.45 | COMPLETED
【订单】ID 1175   | 客户 260    | 时间 2025-02-24 19:27 | 金额 ¥ 8925.54 | COMPLETED
【订单】ID 1045   | 客户 294    | 时间 2025-02-24 17:20 | 金额 ¥ 5753.74 | PAID
【订单】ID 1193   | 客户 270    | 时间 2025-02-24 14:25 | 金额 ¥ 2357.28 | PAID
【订单】ID 1010   | 客户 222    | 时间 2025-02-24 13:23 | 金额 ¥ 8685.75 | SHIPPED
【订单】ID 1063   | 客户 225    | 时间 2025-02-24 12:25 | 金额 ¥  479.50 | COMPLETED
【订单】ID 1090   | 客户 267    | 时间 2025-02-24 02:10 | 金额 ¥ 6632.32 | SHIPPED
【订单】ID 1111   | 客户 284    | 时间 2025-02-24 01:01 | 金额 ¥ 7128.36 | COMPLETED
【订单】ID 1181   | 客户 226    | 时间 2025-02-24 00:38 | 金额 ¥ 2603.51 | PAID
192.168.20.254 - - [03/Mar/2025 09:49:12] "POST /query HTTP/1.1" 200 -

复制

dify创建chatflow

chatflow 是dify中内置的对话流模板,可以实现流程编排的能力,以下为流程编排。

有4个任务节点,主要节点是

  • HTTP请求,访问python暴露的API接口

  • LLM ,接入Deepseek分析模型

clip_4.png

对话实验

在聊天窗口进行询问:

计算并输出每个客户的消费总金额,格式化输出,并自动分为三档客户群,判断每个客户的消费时间习惯

回复如下,基本实现了初步的数据分析工作。

clip.png
clip_1.png
clip_2.png
clip_3.png

总结

通过Oracle+Deepseek+Dify 三者结合,可以实现的场景应该比较多,毕竟Oracle 有数据,deepseek有参数分析,Dify实现流程自动化,以上只是一个比较简单的示例,期待Deepseek在数据库方面有更多实用的场景。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

TA的专栏
zsdba日常
收录38篇内容
英文译文
收录3篇内容
EMCC
收录1篇内容
目录
  • 介绍
  • 实践过程
    • Oracle准备测试数据
    • python实现数据抽取接口
    • dify创建chatflow
    • 对话实验
  • 总结