Domyślna konfiguracja SQLite każe mu synchronizować plik bazy po każdej operacji. W środowiskach testowych nie musimy się martwić o spójność danych w wypadku awarii, poniżej zamieszczam więc backend pozbawiony zbędnego narzutu:
from django.db.backends.sqlite3.base import (
DatabaseWrapper as Sqlite3Wrapper,
DatabaseError,
IntegrityError,
DatabaseFeatures,
DatabaseOperations,
)
class DatabaseWrapper(Sqlite3Wrapper):
def _cursor(self):
new_conn = self.connection is None
cursor = super(DatabaseWrapper, self)._cursor()
if new_conn:
cursor.execute('PRAGMA synchronous=OFF')
return cursor
W przypadku projektu, nad którym właśnie pracujemy, czas przebudowania bazy od nowa na partycji XFS spadł z półtorej minuty do pięciu sekund.