You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的cx_Oracle从Oracle数据库中下载提取存储文件

问题解答

结论

不需要额外引入第三方库,cx_Oracle 原生支持读取Oracle数据库中存储的大对象(BLOB/CLOB类型,也就是通常用来存文件的字段类型),仅需要在SQL请求中查询到对应的大对象字段,配合cx_Oracle提供的读写接口即可完成文件下载。

实现示例

读取BLOB类型存储的二进制文件(图片、压缩包、文档等)

import cx_Oracle

# 数据库连接逻辑和你现有写法一致
dsn_tns = cx_Oracle.makedsn('****', '****', service_name='****')
conn = cx_Oracle.connect(user=r'****', password='****', dsn=dsn_tns)
c = conn.cursor()

# 假设存储文件的表名为file_storage,存文件内容的字段是blob_content,文件名字段是file_name,可按实际业务调整SQL
c.execute('SELECT file_name, blob_content FROM file_storage WHERE 你的查询条件')

for file_name, blob_data in c:
    # 直接将BLOB对象写入本地文件即可
    if blob_data:
        with open(file_name, 'wb') as f:
            f.write(blob_data.read())
            # 小文件可以直接写f.write(blob_data),大文件建议分块读取避免占用过多内存

conn.close()

读取CLOB类型存储的文本文件

import cx_Oracle

dsn_tns = cx_Oracle.makedsn('****', '****', service_name='****')
conn = cx_Oracle.connect(user=r'****', password='****', dsn=dsn_tns)
c = conn.cursor()

c.execute('SELECT file_name, clob_content FROM file_storage WHERE 你的查询条件')

for file_name, clob_data in c:
    if clob_data:
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(clob_data.read())

conn.close()

注意事项

  • 如果存储的文件体积特别大(大于1G),可以调整cx_Oracle的大对象读取缓存参数,或者分块读取数据,避免内存溢出
  • 不需要使用特殊的SQL语法,正常查询包含大对象的字段即可

内容的提问来源于stack exchange,提问作者Tsirsuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:45:03