本帖最后由 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()
|