【oracle003】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系
2.欢迎批评指正,跪谢一键三连!

  • 资源下载: oci.dll、oraocci11.dll、oraociei11.dll3个资源文件
  • 资源下载: Instant Client Setup.exe
  • 资源下载: oci.dll、oraocci11.dll、oraociei11.dll3个资源文件
  • 资源下载: Instant Client Setup.exe
  • 文章参考:【kettle005】kettle访问Oracle数据库并处理数据至execl文件(已更新)
  • 文章参考:【oracle】cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number,ORA-00911,DPI-1047
  • 文章参考:【oracle】cx_Oracle.DatabaseError: ORA-24816: Expanded non LONG bind data supplied after actual LONG o

文章目录

    • 1.`oracle`建表语句
    • 2.图片转为字节、base64编码等形式插入`oracle`数据库
    • 3.`oracle`数据库存储、处理效果

1.oracle建表语句

  • create table youli.youli_image_test
    (id varchar(16), image blob, imagebase64 clob, imagebin blob
    ) select * from youli.youli_image_test WHERE rownum<4SELECT dbms_lob.substr(IMAGEBIN, 40000, 1) ff FROM youli.youli_image_test
    

2.图片转为字节、base64编码等形式插入oracle数据库

  • 图片数据转码、base64转码,反转可视化显示验证

  • python代码实现

    import sys
    import base64
    import cx_Oracle
    from PIL import Image
    import os
    import iopath = "D:\桌面\itest"
    def intoimg2orcl( id_cnt, img , base64img, bytesimg ):database = cx_Oracle.connect('system/oracle@192.168.48.150/xe') # 建立一个Oracle连接# cx_Oracle.connect("用户名/密码@Oracle服务器IP/Oracle的SERVICE_NAME")cursor = database.cursor()  # 存入图片, 创建游标sql = "insert into youli.youli_image_test values (:1, :2, :3, :4)"args = ( str(id_cnt), img , base64img, bytesimg )cursor.execute( sql, args )database.commit()cursor.close() # 关闭游标database.close() # 关闭数据库连接print("===============")print("Done! ")def selectimgforcl():database = cx_Oracle.connect('system/oracle@192.168.48.150/xe') # 建立一个Oracle连接# cx_Oracle.connect("用户名/密码@Oracle服务器IP/Oracle的SERVICE_NAME")cursor = database.cursor()  # 存入图片, 创建游标sql = "select * from youli.youli_image_test WHERE rownum<4"cursor.execute( sql )rows = cursor.fetchall()for row in rows:id = row[0]image = row[1].read()imagebase64 = row[2].read()imagebin = row[3].read()bimg = byte2image(imagebin) # 图片字节数据可视化显示验证bimg.show()base642img( imagebase64 ) # 图片base64数据可视化显示验证breakcursor.close() # 关闭游标database.close() # 关闭数据库连接
    def encode_image(file_path):"""读取图片文件并转换为base64编码"""with open(file_path, 'rb') as image_file:encoded_string = base64.b64encode(image_file.read())# b64_encode = 'data:image/jpeg;base64,%s' % sreturn encoded_string.decode('utf-8')
    def read2byte( jpg_fpath ):"""图片数据转为字节数据"""image = Image.open(jpg_fpath)img_bytes = io.BytesIO()    # 创建一个字节流管道image = image.convert("RGB")    # 把PNG格式转换成的四通道转成RGB的三通道,然后再保存成jpg格式image.save(img_bytes, format="JPEG")    # 将图片数据存入字节流管道, format可以按照具体文件的格式填写image_bytes = img_bytes.getvalue()  # 从字节流管道中获取二进制return image_bytes
    def byte2image(byte_data):''' byte转为图片, byte_data: 二进制 '''image = Image.open(io.BytesIO(byte_data))return image
    def base642img( base64_encod_str ):"""base64数据转为图片数据可视化"""res = base64_encod_strimg_b64decode = base64.b64decode(res)image = io.BytesIO(img_b64decode)img = Image.open(image)img.show()"""循环处理图片数据,入库,查询、可视验证"""
    id_cnt = 1
    for jpg in os.listdir(path):jpg_fpath = path + '\\' + jpgimg_fp = open( jpg_fpath, 'rb')img = img_fp.read()img_base64 = encode_image( jpg_fpath )img_bytes = read2byte( jpg_fpath )print( len(img), len(img_base64), len(img_bytes) )intoimg2orcl( id_cnt, img , img_base64, img_bytes)   # 插入不同类型图片编码数据至oracle数据库img_fp.close()id_cnt += 1selectimgforcl()break
    

3.oracle数据库存储、处理效果

  • open( jpg_fpath, 'rb').read(),image
    在这里插入图片描述
  • base64,base64.b64encode(image_file.read())
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu手动替换源后,更新源时提示“仓库.... jammy Release“ 没有Release文件

问题如图所示&#xff0c;由于问题不好定位&#xff0c;我就从替换源&#xff0c;以及解决错误提示这两个步骤&#xff0c;来解决其中可能存在的问题。 1、替换源 这一步骤&#xff0c;网上的资料可以搜到很多&#xff0c;我跟着做了之后&#xff0c;总会冒出来各种各样的小问…

皮影戏艺术品3D沉浸式展馆提供非同一般的趣味体验

引领艺术展示的未来&#xff0c;深圳华锐视点融合多年的web3d项目制作经验&#xff0c;倾力打造3D虚拟艺术品展馆在线编辑平台&#xff0c;为您提供一个超越时空限制的线上艺术展示平台。 一、极致视觉盛宴 我们拥有领先的美术团队&#xff0c;运用先进的web3D开发技术&#xf…

可能是最适合PS的AI插件,设计师大救星!StartAI初体验!不是恰饭

这款软件虽然有一些功能需要完善&#xff0c;比如&#xff1a; 1&#xff1a;生成图片产品海报&#xff0c;会出现图随意出现&#xff0c;跟设计图起冲突&#xff0c;需要PS才可以正常使用它。 2&#xff1a;即使开会员也需要排队生成。 3: 还有&#xff0c;会员没有更加好用的…

vue3结合element-plus之如何优雅的使用表单组件

背景 在日常开发中,我们会经常使用 element-ui 或者是 antdesign 或者是 element-plus 等组件库实现搜索功能 这里就需要用到相关表单组件 下面就以 element-plus 为例,我们实现一个搜索功能的组件,并且随着屏幕尺寸的变化,其布局也会跟随变化 最终大致效果如下: 这里…

C++:set和map的底层封装模拟实现

目录 底层对比&#xff1a; 底层红黑树结构和set、map&#xff1a; 底层模拟&#xff1a; 传值调用&#xff1a; 迭代器&#xff1a; operator &#xff08;&#xff09; find函数 operator&#xff08;&#xff09; 、仿函数 set和map的仿函数 &#xff1a; 图解&a…

地平线-旭日X3派(RDK X3)上手基本操作

0. 环境 - win10笔记本 - RDK X3 1.0&#xff08;地平线旭日X3派&#xff0c;后来改名为代号RDK X3&#xff09; 1. 下载资料 https://developer.horizon.ai/resource 主要下载镜像 http://sunrise.horizon.cc/downloads/os_images/2.1.0/release/ 下载得到了 ubuntu-prei…

vs无法打开或包括文件”QTxxx“

vs创建项目时默认引入core、gui、和widgets等模块&#xff0c;在需要网络通讯或者图表等开发时需要添加相应模块。 点击扩展 -> QT VS Tools -> QT Project Setting->Qt Modules&#xff0c;添加相应模块即可

奇瑞控股携手契约锁推动客户、供应商及内部业务全程数字化

奇瑞控股集团是安徽省排名第一的制造业企业&#xff0c;同时入选中国企业家协会发布的中国500强、《财富》中国500强&#xff0c;连续21年位居中国品牌乘用车出口第一。 面对汽车行业“新四化”主题及“数字化”时代变革&#xff0c;奇瑞控股持续创新求变&#xff0c;率先引入电…

Java18的新特性介绍

一、概况 Java 18是Java编程语言的最新版本&#xff0c;它于2022年9月发布。Java 18引入了许多新特性和改进&#xff0c;以下是其中一些重要的新特性。 元编程功能&#xff1a;Java 18引入了元注释和元类型声明的功能&#xff0c;使开发人员能够在编译时对注解进行元处理。这为…

【C++】位图/布隆过滤器+海量数据处理

目录 一、位图 1.1 位图的概念 1.2 位图的实现 1.3 位图的应用&#xff08;面试题&#xff09; 二、布隆过滤器 2.1 布隆过滤器的引入 2.2 布隆过滤器概念 2.3 布隆过滤器的插入和查找 2.4 布隆过滤器的实现 2.5 布隆过滤器的优点和缺陷 2.6 布隆过滤器的应用&#…

Servlet 的 API

HttpServlet init&#xff1a;当 tomcat 收到了 /hello 这样的路径是请求后就会调用 HelloServlet&#xff0c;于是就需要对 HelloServlet 进行实例化&#xff08;只实例一次&#xff0c;后续再有请求也不实例了&#xff09;。 destory&#xff1a;如果是通过 smart tomcat 的停…

洗地机品牌哪个牌子好?实力派洗地机品牌TOP10榜单

洗地机依靠其洗、拖、吸、烘为一体的功能&#xff0c;能高效的完成地面清洁的工作&#xff0c;深受大家的喜爱。但是洗地机的型号越来越多&#xff0c;功能也越来越多&#xff0c;对于不想花大价钱&#xff0c;又想要高性价比的精致人群来说实在不友好&#xff0c;所以笔者今天…

C++ 中重写重载和隐藏的区别

重写&#xff08;override&#xff09;、重载&#xff08;overload&#xff09;和隐藏&#xff08;overwrite&#xff09;在C中是3个完全不同的概念。我们这里对其进行详细的说明 1、重写&#xff08;override&#xff09;是指派生类覆盖了基类的虚函数&#xff0c;这里的覆盖必…

实例展示vue单元测试及难题解惑

通过生动详实的例子带你排遍vue单元测试过程中的所有疑惑与难题。 技术栈&#xff1a;jest、vue-test-utils。 共四个部分&#xff1a;运行时、Mock、Stub、Configuring和CLI。 运行时 在跑测试用例时&#xff0c;大家的第一个绊脚石肯定是各种undifned报错。 解决这些报错…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(九)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 16 节&#xff09; P16《15.ArkUI-状态管理-任务统计案例》 1、实现任务进度卡片 怎么让进度条和进度展示文本堆叠展示&#xff1…

./scripts/Makefile.clean 文件分析

文章目录 目标 $(subdir-ymn)目标__clean $(clean-dirs):     make -f ./scripts/Makefile.clean obj$(patsubst _clean_%,%,$) $(clean-dirs)$(patsubst _clean_%,%,$)_clean_api _clean_cmd _clean_common _clean_disk _clean_drivers _clean_drivers/ddr/altera _clean_d…

react中的useEffect()的使用

useEffect()是react中的hook函数&#xff0c;作用是用于创建由渲染本身引起的操作&#xff0c;而不是事件的触发&#xff0c;比如Ajax请求&#xff0c;DOM的更改 首先useEffect()是个函数&#xff0c;接受两个参数&#xff0c;第一个参数是一个方法&#xff0c;第二个参数是数…

vue3 路由跳转 携带参数

实现功能&#xff1a;页面A 跳转到 页面B&#xff0c;携带参数 路由router.ts import { createRouter, createWebHistory } from "vue-router";const routes: RouteRecordRaw[] [{path: "/demo/a",name: "aa",component: () > import(&quo…

x264 码率控制原理:x264_ratecontrol_start 函数

x264_ratecontrol_start 函数 函数原理 函数功能:编码一帧之前,为当前帧选择一个量化 QP,属于帧级别码率控制;这对于控制视频质量和文件大小至关重要。通过调整QP,编码器可以在保持视频质量的同时,尽可能减小输出文件的大小。函数参数:x264_t *h: 编码器上下文结构体指…

地信遥感测绘电子书

《地理信息系统概论》&#xff0c;黄杏元&#xff0c;马劲松编著&#xff0c;第三版&#xff0c;高等教育出版社&#xff0c;2008年 《地理信息系统》&#xff08;第二版&#xff09;汤国安&#xff0c;赵牡丹&#xff0c;杨昕等编&#xff0c;高等教育出版社&#xff0c;2010…