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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.