我正在尝试通过relstorage在 sqlite 后端保存一个 > 1GB 的 blob。以下最小工作示例
- 删除任何先前创建的数据库以及 blob 目录,
- 创建一个新的数据库和
- 将 1GB 的 blob 保存到数据库中。
最小工作示例:
import os
import shutil
from ZODB import blob, config
connectionString = """
%import relstorage
<zodb main>
<relstorage>
blob-dir blob
keep-history false
cache-local-mb 0
<sqlite3>
data-dir .
</sqlite3>
</relstorage>
</zodb>
"""
# cleaning up
for x in os.listdir():
if "sqlite" in x:
os.remove(x)
shutil.rmtree("blob", True)
# creating database
db = config.databaseFromString(connectionString)
with db.transaction() as conn:
conn.root.blob = blob.Blob()
with conn.root.blob.open("w") as f:
f.write(b"\0" * 1024 ** 3)
在新创建的对象的提交期间(在__exit__
db.transaction with-block 的方法中)发生错误,并出现以下最终异常:
sqlite3.InterfaceError:错误绑定参数 2 - 可能是不受支持的类型。
保存具有大小的 blob1024 ** 2
不会引发异常。
如何在不使用共享 blob 目录的情况下使用 relstorage 将 blob 保存在 sqlite 后端?