Is it possible to find and delete orphaned blobs in the app engine blobstore?
I'm开发者_如何学Python using the python api and have created a few orphaned blobs during testing.
Because of a bug in the dashboard, I can't currently delete these, and in any case going forward I would like to be able to do this programmatically since it will be unfeasible to do it manually once the number of entities goes up.
If your BlobReferenceProperty field is indexed, then yes, it's quite possible.
The BlobInfo class provides the same set of fields as a regular model, so you can do it something like this:
blobs = BlobInfo.all().fetch(500)
for blob in blobs:
if not MyModel.all().filter("blob_ref =", blob.key()).count(1):
blob.delete()
If you have more than a few blobs, you probably want to reimplement this using the recently reduced mapreduce API.
Slight improvement: using run
instead of fetch
will return an iterable instead of a list, so you don't need to limit the number of entries in the query:
blobs = BlobInfo.all().run()
instead of
blobs = BlobInfo.all().fetch(500)
精彩评论