Как мне успешно интегрировать вторую базу данных с Django South? - PullRequest
1 голос
/ 28 марта 2012

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

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

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

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

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

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

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

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

    Полагаю, юг ожидает, что его таблица MigrationHistory будет существовать в 'geo' база данных тоже?

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

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

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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 28 марта 2012

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

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

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

...