如何使用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
相关产品推荐
相关产品推荐

