【oracle】图片转为字节、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<4
    
    SELECT 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 io
    
    path = "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数据可视化显示验证
            break
        cursor.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' % s
            return 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_str
        img_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 + '\\' + jpg
        img_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 += 1
        selectimgforcl()
        break
    

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTFshow 爆破

第一题0 抓包发现输入账号密码后数据包会多一个base64编码 所有推出用户密码在传输的时候进行了加密 所以爆破时也用base64加密 设置paylod 用题目给的字典 在添加两条规则 第一个是增加前缀 admin: 第二个是使得payload进行base64编码 取消URL编码字符 因为会把号编码了 开…

【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型

文章目录 一、背景二、方法2.1 模型架构2.2 输入和输出2.3 训练 三、效果3.1 Image Caption 和 General Visual Question Answering3.2 Text-oriented Visual Question Answering3.3 Refer Expression Comprehension3.4 视觉-语言任务的少样本学习3.5 真实世界用户行为中的指令…

【FPGA、maltab】基于FPGA的SOQPSK调制解调技术的设计与实现

基于FPGA的SOQPSK调制解调技术的设计与实现 SOQPSK一、QPSK、OQPSK、SOQPSK之间的关系二、SOQPSK调制原理 matlab 仿真FPGA 实现顶层设计发射模块接收模块顶层调制解调FPGA代码 SOQPSK 一、QPSK、OQPSK、SOQPSK之间的关系 SOQPSK&#xff08;Shaped Offset Quadrature Phase …

Oracle 自治数据库 Select AI 初体验

这几天有点时间&#xff0c;准备尝试下Oracle Select AI&#xff0c;虽然此功能2023年就已经发布了。 Oracle自治数据库已经集成好了Select AI&#xff0c;本文也是讲的这个。 配置 Select AI 需要以下步骤&#xff1a; 创建ADB申请Cohere/OpenAI免费账号设置ADB测试Select…

第十七篇:数据库性能优化的数学视角:理论与实践的融合

数据库性能优化的数学视角&#xff1a;理论与实践的融合 1. 引言 在现代信息技术快速发展的背景下&#xff0c;数据库性能优化已经成为计算机科学领域的一个热点问题。随着数据量的爆炸式增长和用户需求的多样化&#xff0c;数据库系统所承载的数据处理任务变得越来越复杂&…

unity制作app(7)--panel control

根据用户的状态&#xff0c;在界面中显示不同的panel 1.新建一个脚本PanelControl&#xff0c;控制各个脚本的显示与隐藏 2.实现第一个逻辑判断功能&#xff1a;如果没有登记过信息&#xff0c;就直接跳转到登记界面&#xff0c;如果登记过&#xff0c;跳转到住界面。许多需要…

2A 150KHz 40V Buck DC to DC 转换器XL1509

前言&#xff1a; 该器件仅做介绍&#xff0c;不推荐在新设计中使用。 新设计应尽量使用MHZ开关频率&#xff0c;以降低电感量&#xff0c;从而降低成本。 新设计应使用同步DCDC降压转换器。 XL1509丝印和封装 引脚定义 XL1509管脚描述 管脚编号 管脚名称 管脚描述 1 电压输入…

Online RL + IL :Policy Improvement via Imitation of Multiple Oracles

NIPS 2020 paper code 如何利用多个次优专家策略来引导智能体在线学习&#xff0c;后续有多个文章研究该设定下的RL。 Intro 论文探讨了在强化学习&#xff08;RL&#xff09;中&#xff0c;如何通过模仿多个次优策略&#xff08;称为oracle&#xff09;来提升策略性能的问题…

宁静致远(“静”)

宁静致远是一个成语&#xff0c;读音为nng jng zh yuǎn&#xff0c;意思是只有心境平稳沉着、专心致志&#xff0c;才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》&#xff0c;蜀汉丞相诸葛亮的…

TEMU电商行情分析:未来趋势与盈利机遇探讨

近年来&#xff0c;跨境电商行业风起云涌&#xff0c;其中TEMU作为新兴力量&#xff0c;其市场表现备受关注。那么&#xff0c;TEMU电商现在的行情究竟如何?对于卖家而言&#xff0c;是否仍然是一个能够赚钱的平台呢? 首先&#xff0c;从市场趋势来看 TEMU电商正处于一个快速…

创建按钮的第二种方法

可以设置两个参数&#xff0c;按钮的内容和父对象 QPushButton * button2 new QPushButton("第二个按钮",this); 区别&#xff1a; 方式1&#xff1a;窗口默认大小&#xff0c;按钮显示在左上角 方式2&#xff1a;窗口是根据按钮的大小来创建的 (所以需要重置窗…

Java入门基础学习笔记27——生成随机数

Random的使用&#xff1a;生成随机数。 随机数应用&#xff1a; 随机点名&#xff1a; 年会抽奖&#xff1a; 猜数字游戏&#xff1a; 密码学。 查看API文档&#xff1a; package cn.ensource.random;import java.util.Random;public class RandomDemo1 {public static voi…

强化学习的优化策略PPO和DPO

DPO DPO(直接偏好优化)简化了RLHF流程。它的工作原理是创建人类偏好对的数据集&#xff0c;每个偏好对都包含一个提示和两种可能的完成方式——一种是首选&#xff0c;一种是不受欢迎。然后对LLM进行微调&#xff0c;以最大限度地提高生成首选完成的可能性&#xff0c;并最大限…

win编写bat脚本启动java服务

新建txt&#xff0c;编写&#xff0c;前台启动&#xff0c;出现cmd黑窗口 echo off start java -jar zhoao1.jar start java -jar zhoao2.jar pause完成后&#xff0c;重命名.bat 1、后台启动&#xff0c;不出现cmd黑窗口&#xff0c;app是窗口名称 echo off start "名…

如何同步管理1000个设备的VLAN数据?

什么是VLAN&#xff1f; VLAN&#xff0c;也就是虚拟局域网&#xff0c;是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中&#xff0c;一个企业级交换机一般是24口或者是48口&#xff0c;连接这些接口的终端在物理上形成一个广播域。广播域过大&#xff0c;就会导…

异地组网群晖不能访问怎么办?

在日常使用群晖网络储存设备时&#xff0c;我们常常会遇到无法访问的情况&#xff0c;特别是在异地组网时。这个问题很常见&#xff0c;但也很让人困扰。本文将针对异地组网群晖无法访问的问题进行详细解答和分析。 异地组网的问题 在异地组网中&#xff0c;群晖设备无法访问的…

Unity设计模式之工厂模式

什么是工厂模式&#xff1f; 工厂是一种创建型设计模式。通俗来讲就是提供一种封装对象创建的方式&#xff0c;将对象的创建和使用区分开。就是Unity里面通常用到的创建和管理对象。 工厂模式有什么优点&#xff1f; 1、封装对象的创建方式&#xff0c;使其更加灵活、易于管理…

Vue和Django前后端实现跨域

1.为什么要解决跨域&#xff1a; 前端与后端分处不同的域名&#xff0c;因为客户端访问不同源的服务端时会遭到浏览器的同源策略的拦截&#xff0c;所以我们需要配置CORS&#xff0c;处理的方式有很多&#xff0c;先来说下自己学习到的。 2.前端处理跨域&#xff1a; 前端项目是…

JVM运行时内存:程序计数器

文章目录 1. 程序计数器的作用2. 程序计数器的基本特征3. 程序计数器的问题 运行时内存整体结构如下图所示: 1. 程序计数器的作用 为了保证程序(在操作系统中理解为进程)能够连续地执行下去&#xff0c;CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作…

文档分类FastText模型 (pytorch实现)

文档分类FastText FastText简介层次softmaxN-gram特征FastText代码&#xff08;文档分类&#xff09; FastText简介 FastText与之前介绍过的CBOW架构相似&#xff0c;我们先来会议一下CBOW架构&#xff0c;如下图&#xff1a; CBOW的任务是通过上下文去预测中间的词&#xff0…