吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 657|回复: 2
收起左侧

[Python 原创] 把oracle数据库表中的图片等数据下载到本地的脚本

[复制链接]
ccbea 发表于 2023-11-24 14:00
本帖最后由 ccbea 于 2023-11-24 14:01 编辑

Oracle数据库里有很多图片存储在表中用的blob格式,现在需要下载到本地所以写了这个脚本


软件说明:
        这段代码是一个Python脚本,它的功能是从Oracle数据库中查询图片数据,并将这些图片保存到指定的文件夹中。这段代码的功能和作用:

导入必要的模块:

os:用于提供与操作系统交互的函数。
cx_Oracle:Python连接Oracle数据库的模块。
初始化Oracle客户端:
使用cx_Oracle.init_oracle_client函数初始化Oracle客户端,指定Oracle Instant Client所在的目录。

建立数据库连接:

使用cx_Oracle.makedsn函数构建数据源名称(DSN)。
调用cx_Oracle.connect函数建立与数据库的连接,并返回一个连接对象。
使用连接对象创建游标对象cursor,用于执行SQL查询。
执行SQL查询:
定义了一个SQL查询语句,从表t_ware_certificate_image中选择图片数据。

保存图片到文件夹:

通过循环遍历执行SQL查询结果集,逐行处理每条记录。
从每条记录中读取图片数据,并构建文件名,同时进行特殊字符的替换。
将图片数据写入到以文件路径。
关闭游标和连接:
在处理完所有数据后,关闭游标和数据库连接,释放资源。

总体来说,这段代码的作用是从Oracle数据库中查询图片数据,然后将这些图片保存到指定的文件夹中。这是一个常见的数据库操作,用于将数据库中的二进制数据(比如图片、文档等)导出到文件系统中。

软件使用示例: 修改配置后直接运行 注意保存路径的文件夹需要提前建好 建议使用仅有查询权限的账号


[Python] 纯文本查看 复制代码
import os
import cx_Oracle

cx_Oracle.init_oracle_client(lib_dir=r"D:\Program Files\PLSQL Developer 15\instantclient_21_9")  #Oracle Instant Client 

# 建立数据库连接
dsn = cx_Oracle.makedsn("数据库ip", 端口, service_name="数据库服务名")
connection = cx_Oracle.connect("用户名", "密码", dsn=dsn)
cursor = connection.cursor()

# 执行 SQL 查询
query = """
SELECT
        t.img,
FROM
                t_ware_certificate_image t
                

"""

cursor.execute(query)

# 保存图片到文件夹
folder_path = r"D:\新建文件夹"

for result in cursor.fetchall():
    if result[3] is not None:
        img_data = result[0].read()  # 读取图片数据 假设图片数据在查询结果的第1列
        file_name = f"{result[1]}-{result[2]}-{result[3]}-{result[4]}.jpg"  # 构造文件名 格式是jpg
        file_name = file_name.replace("/", "_").replace("\\", "_").replace(":", "_").replace("*", "_").replace("?", "_").replace('"', "_").replace("<", "_").replace(">", "_").replace("|", "_")  # 替换特殊字符
        file_path = os.path.join(folder_path, file_name)  # 构造文件路径
        if os.path.exists(file_path):  # 判断文件是否已存在
            i = 1
            while True:
                new_file_name = f"{result[1]}-{result[2]}-{result[3]}-{result[4]}({i}).jpg"
                new_file_name = new_file_name.replace("/", "_").replace("\\", "_").replace(":", "_").replace("*", "_").replace("?", "_").replace('"', "_").replace("<", "_").replace(">", "_").replace("|", "_")  # 替换特殊字符
                new_file_path = os.path.join(folder_path, new_file_name)
                if os.path.exists(new_file_path):
                    i += 1
                else:
                    file_path = new_file_path
                    break
        with open(file_path, "wb") as file:
            file.write(img_data)

# 关闭游标和连接
cursor.close()
connection.close()
微信图片_20231124135839.png

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

laustar 发表于 2023-11-28 17:25
支持。学习一下
MOYU17 发表于 2023-11-29 10:33
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 03:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表