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

Python SQLite3:从Blob取回Buffer后还原为Bencoded字节对象

解决方法:从SQLite Blob的Buffer对象还原原始Bencoded数据

嘿,这个问题其实很好解决——当你从SQLite的Blob字段取回Buffer对象时,只需要简单几步就能还原成原始的字节数据或者sqlite3.Binary类型,我给你拆解一下:

核心逻辑

sqlite3.Binary本质上只是字节数据的一个包装类,用来告诉SQLite把这个序列当作Blob存储。当你查询取回时得到的Buffer对象,其实和原始字节数据是完全兼容的,只需要做个简单转换就能恢复。

1. 直接还原为原始Bencoded字节对象

如果你的目标是拿到存入时的原始字节数据(也就是libtorrent的bencode()返回的结果),直接用bytes()函数把Buffer对象转成字节即可:

# 假设你从查询结果中拿到了buffer_data
raw_bencoded_bytes = bytes(buffer_data)

这个raw_bencoded_bytes就是和你存入前完全一致的Bencoded字节序列,可以直接传给libtorrent.torrent_info()重新解析种子信息。

2. 还原为sqlite3.Binary类型

如果你需要严格还原成存入时的sqlite3.Binary对象,只需要把转换后的字节传入sqlite3.Binary()构造函数:

import sqlite3

# 先转成字节
raw_bytes = bytes(buffer_data)
# 再包装成sqlite3.Binary
binary_obj = sqlite3.Binary(raw_bytes)

这样得到的binary_obj就和你存入数据库时的对象完全一样了。

完整示例代码

这里给你一个从存到取的完整流程参考,方便你对照:

import sqlite3
import libtorrent as lt

# ----------------------
# 存入数据的代码
# ----------------------
# 获取种子的Bencoded数据
torrent_info = lt.torrent_info("your_torrent.torrent")
bencoded_data = torrent_info.bencode()

# 连接数据库并存入
conn = sqlite3.connect("torrents.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS torrents (id INTEGER PRIMARY KEY, torrent_data BLOB)")
# 用sqlite3.Binary包装后存入
cursor.execute("INSERT INTO torrents (torrent_data) VALUES (?)", (sqlite3.Binary(bencoded_data),))
conn.commit()
conn.close()

# ----------------------
# 查询并还原的代码
# ----------------------
conn = sqlite3.connect("torrents.db")
cursor = conn.cursor()
cursor.execute("SELECT torrent_data FROM torrents WHERE id = ?", (1,))
result = cursor.fetchone()

if result:
    # 取回的Buffer对象
    buffer_data = result[0]
    # 还原为原始字节
    raw_bencoded = bytes(buffer_data)
    # 重新解析为torrent info
    restored_torrent = lt.torrent_info(raw_bencoded)
    print(f"还原成功,种子名称:{restored_torrent.name()}")

conn.close()

补充说明

有些情况下,你取回的可能是memoryview对象(也会被当作Buffer类处理),不用担心,同样用bytes()转换就可以,效果完全一样,不会丢失任何数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:02:11