I'm 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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With