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

Python SQLite3:存储的Blob无法转回bytes的问题求助

解决SQLite Blob数据读取后无法转回bytes的问题

问题背景

在SQLite3中定义"bytes_as_blob" BLOB列,使用sqlite3.Binary(some_data)存储字节数据后,DB Browser显示为<memory at 0x000002157DA24F40>;通过pd.read_sql_query读取数据到DataFrame时,bytes_as_blob列类型为object,实际存储的是<class 'str'>,无法直接转回原始bytes。

原因分析

pandas的read_sql_query默认会将SQLite返回的memoryview对象(由sqlite3.Binary存储的Blob数据)转换为字符串(显示为对象的repr),而非保留bytes类型,导致无法直接还原原始字节数据。

解决方案

方案1:手动处理查询结果再构造DataFrame

直接通过sqlite3游标执行查询,手动将memoryview转换为bytes后再生成DataFrame:

import sqlite3
import pandas as pd

conn = sqlite3.connect('your_db.db')
sql_statement = "SELECT uid, bytes_as_blob from a_table LIMIT 10"

# 执行查询并处理Blob列
cursor = conn.cursor()
cursor.execute(sql_statement)
rows = cursor.fetchall()
# 将每个Blob字段的memoryview转为bytes
processed_rows = [(row[0], bytes(row[1])) for row in rows]

# 构造DataFrame
df = pd.DataFrame(processed_rows, columns=['uid', 'bytes_as_blob'])

# 验证类型
print(f"type(df.loc[1, 'bytes_as_blob']) = {type(df.loc[1, 'bytes_as_blob'])}")  # 输出 <class 'bytes'>

方案2:使用pandas的converters参数指定转换逻辑

在read_sql_query中通过converters参数,为bytes_as_blob列指定转换函数:

import pandas as pd
import sqlite3

def convert_blob(blob_obj):
    # 若为memoryview则转为bytes,兼容其他情况
    if isinstance(blob_obj, memoryview):
        return bytes(blob_obj)
    return blob_obj

conn = sqlite3.connect('your_db.db')
sql_statement = "SELECT uid, bytes_as_blob from a_table LIMIT 10"

# 读取时指定转换器
df = pd.read_sql_query(sql_statement, conn, converters={'bytes_as_blob': convert_blob})

# 验证类型
print(f"type(df.loc[1, 'bytes_as_blob']) = {type(df.loc[1, 'bytes_as_blob'])}")  # 输出 <class 'bytes'>

方案3:确认存储逻辑正确性

确保存储时确实使用sqlite3.Binary包装原始bytes数据,避免因存储错误导致读取异常:

some_data = b'your_original_byte_data'
conn.execute("INSERT INTO a_table (uid, bytes_as_blob) VALUES (?, ?)", (1, sqlite3.Binary(some_data)))
conn.commit()

补充说明

DB Browser显示的<memory at ...>是memoryview对象的字符串表示,属于正常现象,不影响数据的完整性,只要读取时正确转换即可还原原始字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:23:19