2017-01-03 3 views
2

Ich versuche einige DB-Frontends mit Django zu erstellen, da ich die allgemeine MVC-Struktur sowie das Template-System und die Admin-Schnittstelle mag. Ich habe jedoch Probleme mit bestimmten Aspekten der Verwendung eines PostgreSQL-Backends.PostgreSQL-Schema in Django angeben

Ich habe, um herauszufinden, verwaltet, wie die verschiedenen Schemata zu spezifizieren (und Datenbanken) unter Verwendung der Datenbank Abschnitt der settings.py Datei wie folgt:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    }, 
    'MPS': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'OPTIONS': { 
      'options': '-c search_path=django' 
     }, 
     'NAME': 'sandbox_manzer', 
     'HOST': '192.168.2.151', 
     'PORT': '5434', 
     'USER': '******', 
     'PASSWORD': '**********************', 
    } 
} 

Allerdings, wenn ich einige grundlegende Tests versuchen, Skript, wie detailliert here, laufe ich auf ein Problem. Mein Benutzer kann Datenbanken sehr gut erstellen, also wird mein test_db gebaut, aber wenn die django App geht, um die Modelle in Tabellen zu bauen, erhalte ich einen Fehler, der besagt, dass No schema is specified für das test_db. Jede Hilfe, wie ich Schemanamen für die test_db spezifiziere, würde am meisten geschätzt werden. Vor allem, da ich mehrere Apps für ein einzelnes Projekt mit verschiedenen Schemas als logische Trennzeichen erstellen möchte.

Danke!

Antwort

4

Ich nehme an, Sie mit dem Konzept der PostgreSQL vertraut sind schemas.

Ihre App für das django Schema in Ihrer Datenbank suchen (was vermutlich nicht da ist), weil Sie speziell es so gesagt haben.

 'options': '-c search_path=django' 

Für jede Anwendung erstellen ein entsprechend benannte Schema, und geben Sie es in den search_path.

+0

Danke Dario. Ich bin mir jedoch nicht sicher, wie dies in der test_db (wo dieses Problem auftritt) beeinflusst werden. Wie ich denke, weißt du, dass die test_db neu erstellt und dann beim Ausführen von Django-Tests zerstört wird. Ich kann keine Dokumentation darüber finden, wie eine vorhandene Datenbank für Testzwecke angegeben werden kann. Vielleicht könnte es nützlich sein, den hier gezeigten 'MIRROR' zu verwenden (https://docs.djangoproject.com/de/1.10/topics/testing/advanced/#controlling-creation-order-for-test-databases). Irgendwelche Gedanken? – RyanM

+0

Mein erster Versuch wäre, 'search_path = django, public' anzugeben, so dass Tabellen in' public' erstellt werden sollten (was immer da ist), wenn 'django' nicht existiert; Alternativ können Sie den gesamten Abschnitt "OPTIONS" auskommentieren, aber Sie würden den Vorteil separater Schemas verlieren. – Dario

+0

Ich versuche zu vermeiden, alles in das öffentliche Schema zu laden. Ich habe ein paar Artikel gelesen, die darauf hindeuten, dass das Blähen des öffentlichen Schemas die PostgreSQL-Serveroperationen beeinträchtigen und möglicherweise Leistungsprobleme verursachen kann. Außerdem wollte ich Schemas als logische Trennzeichen für meine verschiedenen Apps verwenden. Ich werde damit weiterspielen. – RyanM

Verwandte Themen