ccbea 发表于 2023-11-24 14:00

把oracle数据库表中的图片等数据下载到本地的脚本

本帖最后由 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数据库中查询图片数据,然后将这些图片保存到指定的文件夹中。这是一个常见的数据库操作,用于将数据库中的二进制数据(比如图片、文档等)导出到文件系统中。

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


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 is not None:
      img_data = result.read()# 读取图片数据 假设图片数据在查询结果的第1列
      file_name = f"{result}-{result}-{result}-{result}.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}-{result}-{result}-{result}({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()

laustar 发表于 2023-11-28 17:25

支持。学习一下

MOYU17 发表于 2023-11-29 10:33

刚好准备学Python
页: [1]
查看完整版本: 把oracle数据库表中的图片等数据下载到本地的脚本