2012-03-28 5 views
1

Einer unserer Kunden muss einige Geolocation-Daten zu seiner Site hinzufügen. Da sie bereits ein Datenbank-Setup ohne GIS-Erweiterungen haben, habe ich mich entschieden, eine neue Datenbank (mit den GIS-Erweiterungen) zu erstellen, die ich nur zum Speichern der Geolokalisierungsdaten verwenden möchte.Wie integriere ich erfolgreich eine zweite Datenbank mit Django South?

Ich hatte irgendwann die Dinge auf meiner Entwicklung Maschine in Ordnung zu arbeiten (was bedeutet, ich habe Migrationen für diese neuen Modelle). Aber jetzt, dass der Code geschrieben wurde, importierte ich einen DB-Dump direkt vom Server, so dass meine Entwicklungsmaschine genau die spiegelt die Produktionsmaschine, und jetzt kann ich nicht scheinen, um South die Migrationen korrekt anwenden. South scheint mehrere Funktionen zu haben, die mehrere Datenbanken zulassen, aber keine von ihnen hat bisher funktioniert.

Was ich habe versucht:

  1. einfach das Modell hinzugefügt und die Migration. Das gibt mir die folgenden Fehler:

    AttributeError: 'DatabaseOperations' object has no attribute 
    'geo_db_type' 
    

    OK, also Süd versucht, das Modell auf der ursprünglichen Datenbank erstellen , die nicht die GIS-Erweiterungen hat.

  2. Hinzufügen des Modells, aber Angabe der "Geo" -Datenbank für die Migration die "Geo" -App. Das gibt mir die folgende Fehlermeldung:

    django.db.utils.DatabaseError: relation "south_migrationhistory" 
    does not exist 
    

    Ich denke, südlich seinem MigrationHistory Tisch erwartet auch auf dem ‚Geo‘ Datenbank zu existieren?

  3. Lassen Sie die Modelle von South auf meiner 'Geo'-Datenbank existieren.

    $ python manage.py syncdb --database=geo 
    $ python manage.py migrate 
    

    Das gibt mir die folgende Fehlermeldung:

    django.db.utils.DatabaseError: relation "<model>" already exists 
    

    Ich vermute, das liegt daran, dass ich schon MigrationHistories in der anderen Datenbank gespeichert sind?

  4. Süd hat offenbar ein wenig dokumentierten Funktion namens ‚dbs‘ (siehe: http://south.aeracode.org/docs/databaseapi.html#accessing-the-api) Also versuchte ich die vorherigen drei Methoden wieder alle Instanzen „db“ mit „dbs [‚Geo‘]“ ersetzt.

    a. Migrationen laufen reibungslos, aber erstellen Sie keine Tabellen in meiner 'Geo' Datenbank.

    b. Derselbe Fehler wie bei der Verwendung von 'dbs' Funktionen.

    c. Derselbe Fehler wie bei der Verwendung von 'dbs' Funktionen.

Dieser gesamte Prozess war extrem frustrierend. Hat jemand mehrere Datenbank-Support-up-and-running bei der Verwendung von South?

+0

Haben Sie die von mir gepostete Lösung ausprobiert? –

Antwort

2

Jedes Mal, wenn ich die Tabelle Modelle I Süden verwendet geändert haben und diese Befehle, die Struktur zu ändern und sie immer gearbeitet:

python manage.py convert_to_south "your_app" 
python manage.py migrate "your_app" 

Ich empfehle, diese Befehle ausführen, nachdem syncdb läuft, so werden Ihre Tabellen erstellt.

Verwandte Themen