0

I'm using Firebase Admin SDK with python and would like to delete a Firestore collection with Async/Await clause.

The official document says that (non-Async/Await) deleting should be done like this:

def delete_collection(col_ref, batch_size):
    docs = col_ref.limit(batch_size).stream()
    deleted = 0

    for doc in docs:
        print(f'Deleting doc {doc.id} => {doc.to_dict()}')
        doc.reference.delete()
        deleted = deleted + 1


    if deleted >= batch_size:
        return delete_collection(col_ref, batch_size)

But, this does not work well in Async/Await version. If I put AsyncCollectionReference in the col_ref, it will cause this error:

TypeError: 'async_generator' object is not iterable

Is it possible to fix this probem? Or, is it an totally wrong idea to do Async/Await batch delete?

Thanks!

1 Answers1

2

Try adding async/await statements to your code:

async def delete_collection(coll_ref, batch_size):
    docs = coll_ref.limit(batch_size).stream()
    deleted = 0

    async for doc in docs:
        print(f"Deleting doc {doc.id} => {doc.to_dict()}")
        await doc.reference.delete()
        deleted = deleted + 1

    if deleted >= batch_size:
        return delete_collection(coll_ref, batch_size)
Adam Neuwirth
  • 529
  • 5
  • 10