IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【ORACLE】在oracle10g以上版本启用数据库plsql对python函数的支持(pl4py) -> 正文阅读

[Python知识库]【ORACLE】在oracle10g以上版本启用数据库plsql对python函数的支持(pl4py)

pl4py

项目地址 https://github.com/Dark-Athena/pl4py

使用本程序,你可以在oracle数据库中使用自定义python函数
(不是21c版本中的OML4PY 【ORACLE】在ORACLE数据库中启用机器学习功能(OML)以支持PYTHON脚本的运行
这是开发中的版本,请勿用于生产环境
请确保oracle数据库版本至少为10g
数据库操作系统上需要安装python
为了避免一些不可控的情况,需要在程序中提前手工指定python主程序的全路径
目前只在windows环境中测试通过

原理:

使用schedule_job启动python的flask服务
通过utl_file包将用户自定义函数生成py文件保存到操作系统
使用utl_http包发送请求到flask,传入函数名称及参数数据
flask动态从文件加载python函数,并将参数数据传入函数,获得返回值
此时,plsql中可获得python函数返回的结果

安装步骤

第一步

在数据库操作系统上安装python程序,并安装flask包,建议py3,py2没有测试

pip install flask

第二步

在数据库所在的操作系统上建立一个文件夹,此文件夹会保存你在数据库中创建的包含python函数的文件
例如:

mkdir F:\oracle\PY_FILE

第三步

在数据库中创建一个目录 ,名称为 “PY_FILE” ,指向操作系统中,上一步你创建的文件夹

create or replace directory PY_FILE as 'F:\oracle\PY_FILE'

第四步

使用数据库sys账号对你想要安装本程序的用户进行授权,

grant select on dba_directories to {username} with grant option;

第五步

登录你要安装本程序的数据库账号,依次执行以下脚本

  • PL4PY_FUNC_LIST.sql
  • PL4PY_FUNC_LIST_TRI.trg
  • PL4PY.pck
  • pl4py_func_list_v.sql

使用举例

一、启动服务

begin
  PL4PY.start_service;
end;

二、创建(或更新)函数

BEGIN
  PL4PY.create_func(i_func_name => 'sample_f.py',
                    i_contents  => q'{def sample_f(num):
    return float(num)*float(num)
}');
END;

三、使用函数

select  pl4py.call_func_Eval('sample_f.py', '8') r from dual;

64

四、删除函数

BEGIN
  PL4PY.drop_func(i_func_name => 'sample_f.py');
END;

五、停止服务

begin
  PL4PY.stop_service;
end;

更复杂的函数例子

  1. 基于原始数据计算一个时间和速度相关性的模型,然后输入时间,返回速度
BEGIN
  PL4PY.create_func(i_func_name => 'forecast_speed.py',
                    i_contents  => q'{import numpy
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
def forecast_speed(hour):
    x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
    y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
    mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
    myline = numpy.linspace(1, 23, 100)
    speed = mymodel(float(hour))
    return {'speed':speed}
}');
END;

select pl4py.call_func_Eval(i_func_name =>'forecast_speed.py', i_data=>'11') r from dual

{"speed": 65.03276500414789}
  1. 传入一个sql,获得sql中的所有表或视图名称
    将https://github.com/Dark-Athena/list_table_sql-py
    中的所有文件下载到安装步骤第二步中的文件夹,比如 “F:\oracle\PY_FILE”
    然后在数据库中以实际文件的方式创建函数
BEGIN
  PL4PY.create_func(i_func_name => 'list_table_sql.py',
                    i_dir  => 'PY_FILE',
                    i_file_name  =>'list_table_sql.py');
END;
  
declare
  r varchar2(4000);
  i_data varchar2(4000);
begin
  i_data:='{"sql":"select abc from def,ghi j,k.lmn o","mode":"T"}';
  r := pl4py.call_func_Eval(i_func_name =>'list_table_sql.py', i_data=>i_data);
  dbms_output.put_line(r);
end;

{"tablename": ["def", "ghi", "k.lmn"]}

注意事项:

  1. 服务被设计成长期运行的schedule_job,函数动态切换,因此除非要完全停止或者检查问题,一般不需要执行 PL4PY.stop_service
  2. i_func_name参数必须带后缀 “.py”
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:57:20  更:2021-10-17 11:59:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 11:55:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计