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

Django调用Oracle存储过程获取BLOB图片报错:'str' object has no attribute 'read'

错误原因分析

'str' object has no attribute 'read' 错误说明你在字符串对象上调用了read()方法,但字符串本身并没有这个方法——read()是类文件对象(比如Oracle数据库返回的BLOB流对象)才有的方法。

你的代码中fila[7]返回的是字符串类型,而非预期的BLOB流对象,所以调用.read()会触发这个错误。

解决方案

直接去掉.read()调用,根据fila[7]的实际类型处理:

情况1:fila[7]是二进制字节串(bytes)

这是BLOB字段的正常返回类型,直接传入base64.b64encode即可:

def listar_productos():
    django_cursor = connection.cursor()
    cursor = django_cursor.connection.cursor()
    out_cur = django_cursor.connection.cursor()

    cursor.callproc('FASTFERIA.SP_LISTAR_PRODUCTOS', [out_cur])

    lista = []
    for fila in out_cur:
        data = {
            'data': fila,
            # 去掉.read(),直接使用fila[7]
            'imagen': str(base64.b64encode(fila[7]), 'utf-8')
        }
        lista.append(data)

    return lista

情况2:fila[7]是字符串类型(比如已被自动编码为base64)

如果数据库中存储的是已编码的字符串,直接使用该值即可:

'imagen': fila[7]
验证字段类型

不确定类型的话,可以先打印字段类型确认:

for fila in out_cur:
    print(type(fila[7]))  # 查看输出是bytes还是str
    # 后续代码...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:25:37