2010-12-26 10 views
8

Gemäß this test kann die Einstellung PRAGMA synchronous = OFF Sqlite die Sqlite-Schreibleistung erheblich verbessern.Platz zum Setzen der Option Sqlite PRAGMA in Django Projekt

Ich bin mir der Nachteile durchaus bewusst, würde es aber trotzdem gerne ausprobieren.

Was wäre der beste Ort innerhalb eines Django-Projekts, um diese PRAGMA-Option zu setzen?

Ich kann es nicht von settings.py tun - zumindest nicht die Art, wie der Artikel vorschlägt - weil from django.db import connection einen rekursiven Importfehler verursachen würde.

Antwort

11

diesen Code Fügen Sie in der Datei __init__.py eines Ihrer installierten App:

from django.db.backends.signals import connection_created 
def activate_foreign_keys(sender, connection, **kwargs): 
    """Enable integrity constraint with sqlite.""" 
    if connection.vendor == 'sqlite': 
     cursor = connection.cursor() 
     cursor.execute('PRAGMA foreign_keys = ON;') 

connection_created.connect(activate_foreign_keys) 
+0

Schöne und saubere Lösung, versuchen. Vielen Dank! –

+0

Obwohl ich meine DB-Datei entfernt, alle vorherigen Migrationen entfernt und neue Migrationen erstellt habe, machte dies für mich keinen Unterschied. Die Tabellen wurden nicht wie erwartet mit "bei Löschkaskade" erstellt. Ich frage mich, warum das nicht passiert. –

0

Der Artikel schlägt vor, dass Sie das als Middleware hinzufügen (ganz am Ende). Diese Middleware wird dann innerhalb von settings.py als String konfiguriert, sodass keine Importkonflikte auftreten sollten.