如何从zodb(data.fs)中删除对象后从blobdir中删除文件(blob)

时间:2014-12-11 07:56:59

标签: pyramid zope zodb file-storage blobstorage

我在服务器上传了文件(PDF 4mb),它存储在blobdir中。在(zodb data.fs)中使用属性附件在MYCLASS的对象中引用。如果我删除MYCLASS的对象,则删除该对象,但不删除blobdir上的文件(PDF 4mb)。删除对象后如何删除该blob文件?

1 个答案:

答案 0 :(得分:0)

该文件是过去ZODB修订版的一部分。您需要打包您的ZODB数据库以删除历史修订。

您收到数据库的距离取决于您。删除旧版本后,您将无法再将数据库回滚到这些状态。

如何打包ZODB取决于您的设置。如果您使用的是ZEO,则会有一个命令行工具(zeopack)指示ZEO服务器为您打包存储。

您也可以通过编程方式执行此操作;例如,使用db.pack() method

从您的Pyramid应用中获取
import time
from pyramid_zodbconn import get_connection

db = get_connection(request).db()
db.pack(days=7)

我使用days参数打包ZODB,但保留了过去一周的历史记录。您还可以使用时间戳t(自纪元以来的UNIX秒)指定要打包的特定时间点,或省略删除所有旧版本。

一旦删除了引用blob的修订版,就不会立即删除blob文件;无论何时打包备份都会创建,以防您需要还原操作。将来的打包操作将使用新备份替换先前的备份,从而清除blob。