Как успешно интегрировать вторую базу данных с Django South?

Одному из наших клиентов необходимо добавить данные геолокации на свой сайт. Поскольку у них уже есть база данных без расширений ГИС, я решил создать новую базу данных (с расширениями ГИС), которую я намерен использовать для хранения только данных геолокации.

В какой-то момент я настроил все так, чтобы все работало на моем компьютере для разработки (это означает, что у меня есть миграции для этих новых моделей). Но теперь, когда код написан, я импортировал дамп БД прямо с сервера, чтобы моя машина для разработки точно отражала производственную машину, и теперь я не могу заставить Юг правильно применить миграции. Похоже, что у South есть несколько функций, позволяющих использовать несколько баз данных, но пока ни одна из них не работает.

Что я пробовал:

  1. Просто добавьте модель и мигрируйте. Это дает мне следующую ошибку:

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

    Итак, Юг пытается создать модель в исходной базе данных, которая не имеет расширений ГИС.

  2. Добавление модели, но указание базы данных «гео» для переноса приложения «гео». Это дает мне следующую ошибку:

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

    Я предполагаю, что юг ожидает, что его таблица MigrationHistory также будет существовать в базе данных «гео»?

  3. Разрешить существование моделей юга в моей базе данных «гео».

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

    Это дает мне следующую ошибку:

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

    Я предполагаю, что это потому, что у меня уже есть MigrationHistories, хранящиеся в другой базе данных?

  4. Судя по всему, у South есть малодокументированная функция под названием «dbs» (см.: http://south.aeracode.org/docs/databaseapi.html#accessing-the-api ) Поэтому я снова попробовал предыдущие три метода, заменив все экземпляры «db» на «dbs['geo']».

    а. Миграция проходит гладко, но на самом деле не создает никаких таблиц в моей базе данных «гео».

    б. Та же ошибка, что и при неиспользовании функций 'dbs'.

    в. Та же ошибка, что и при неиспользовании функций 'dbs'.

Весь этот процесс был крайне разочаровывающим. Кто-нибудь получил поддержку нескольких баз данных при использовании South?


person Dan Jaouen    schedule 28.03.2012    source источник
comment
Вы пробовали решение, которое я разместил?   -  person Radu Gheorghiu    schedule 05.04.2012


Ответы (1)


Всякий раз, когда я модифицировал модели таблиц, я использовал юг и эти команды для изменения структуры, и они всегда работали:

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

Я рекомендую запускать эти команды после запуска syncdb, чтобы ваши таблицы были созданы.

person Radu Gheorghiu    schedule 28.03.2012