Sto avendo problemi di memoria perché sembra che Django sta caricando gli oggetti in memoria quando si utilizza delete()
. C'è un modo per impedire a Django di farlo?Come impedire a django di caricare oggetti in memoria quando si utilizza `delete()`?
Dalla documentazione Django:
Django deve recuperare oggetti in memoria per inviare segnali e gestire cascate. Tuttavia, se non ci sono cascate e nessun segnale, Django può prendere un percorso veloce ed eliminare oggetti senza recuperare in memoria. Per le eliminazioni di grandi dimensioni ciò può comportare un utilizzo della memoria notevolmente ridotto. Anche la quantità di query eseguite può essere ridotta.
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#delete
Non faccio uso di segnali. Ho delle chiavi esterne sul modello che sto cercando di eliminare, ma non vedo perché Django abbia bisogno di caricare gli oggetti in memoria. Sembra che lo faccia, perché la mia memoria aumenta mentre la query viene eseguita.
Poiché hai chiavi esterne, Django deve caricare gli oggetti per risolvere il modo in cui la relazione deve gestire la cancellazione: https://docs.djangoproject.com/en/1.8/ref/models/fields/#django .db.models.ForeignKey.on_delete – petkostas
@petkostas Ho provato a mettere 'on_delete = models.DO_NOTHING' sui miei campi ForeignKey, ma questo non ha aiutato. Ma non sarebbe comunque una buona soluzione per me, voglio disabilitare il caricamento degli oggetti in memoria per questa specifica query, non voglio che tutte le mie query ignorino i vincoli ForeignKey. – rednaw
Utilizzare sql raw potrebbe essere una soluzione . – NeoWang