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

如何将Excel识别的多份pandas DataFrame分配ID后以blob存入Oracle

将pandas DataFrame转换为Blob存入Oracle数据库的实现方案

核心思路

pandas DataFrame无法直接作为Blob存储,核心是先将DataFrame序列化为二进制字节流,再将字节流作为Blob字段值写入Oracle表。常用两种序列化方案,可按需选择:

  • pickle序列化:Python原生支持,可完整保留DataFrame的所有属性(如自定义dtype、索引元信息等),仅适合Python环境读取
  • Parquet序列化:跨语言通用列式存储格式,存储压缩率高,版本兼容性好,支持多语言读取,优先推荐使用

步骤1:序列化DataFrame为二进制字节流

方案A:pickle序列化

import pandas as pd
from io import BytesIO

# 你的DataFrame对象
df = pd.DataFrame(...)

buf = BytesIO()
df.to_pickle(buf)
buf.seek(0)
df_blob = buf.read()

方案B:Parquet序列化(推荐)

需要先安装依赖:pip install pyarrow

import pandas as pd
from io import BytesIO

buf = BytesIO()
# 可加compression='gzip'开启压缩,减少存储体积
df.to_parquet(buf, engine='pyarrow', compression='gzip')
buf.seek(0)
df_blob = buf.read()

步骤2:写入Oracle数据库

使用Oracle官方驱动oracledb实现写入,旧版cx_Oracle逻辑完全一致:

import oracledb
import uuid

# 替换为你的数据库连接信息
conn = oracledb.connect(user="用户名", password="密码", dsn="数据库DSN")
cursor = conn.cursor()

# 生成唯一DF_ID,也可按业务规则使用Oracle序列、自增主键等
df_id = str(uuid.uuid4())

# 执行插入
insert_sql = "INSERT INTO 你的目标表名 (DF_ID, DF_BLOB) VALUES (:1, :2)"
cursor.execute(insert_sql, (df_id, df_blob))
conn.commit()

# 关闭资源
cursor.close()
conn.close()

步骤3:从Oracle读取Blob恢复为DataFrame

对应pickle序列化的读取逻辑

query_sql = "SELECT DF_BLOB FROM 你的目标表名 WHERE DF_ID = :1"
cursor.execute(query_sql, (df_id,))
retrieved_blob = cursor.fetchone()[0]

buf = BytesIO(retrieved_blob)
df = pd.read_pickle(buf)

对应Parquet序列化的读取逻辑

query_sql = "SELECT DF_BLOB FROM 你的目标表名 WHERE DF_ID = :1"
cursor.execute(query_sql, (df_id,))
retrieved_blob = cursor.fetchone()[0]

buf = BytesIO(retrieved_blob)
df = pd.read_parquet(buf, engine='pyarrow')

注意事项

  • pickle序列化存在版本兼容问题,读写两端的pandas、Python版本差异过大可能导致反序列化失败
  • 100M以上的大体积DataFrame建议开启Parquet的gzip压缩,存储体积可降至原有的1/10甚至更低,pandas读取时会自动识别压缩格式无需额外处理
  • 写入超大Blob时可开启Oracle的流式写入参数,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:45:05