我试图通过再存储在sqlite后端保存一个blob > 1GB。下面的最低工作示例
最低工作实例:
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__方法)期间,发生错误,但有以下最后异常:
sqlite3.InterfaceError:错误绑定参数2--可能不支持类型。
保存大小为1024 ** 2的blob不会引发异常。
如何能够在没有使用共享blob目录的情况下使用relstorage将blob保存在sqlite后端中?
发布于 2020-10-17 14:18:50
根据我的研究,你不能在这个设置中存储任意大小的气泡。您正在达到sqlite大小限制(https://www.sqlite.org/limits.html)。
在这一阶段,你唯一的选择似乎是:
就我个人而言,如果我使用sqlite,我会倾向于使用共享的blob目录,但是您已经对该选项进行了折扣,所以我认为您的选择是有限的。
https://stackoverflow.com/questions/64243173
复制相似问题