Одному из наших клиентов необходимо добавить данные геолокации на свой сайт. Поскольку у них уже есть база данных без расширений ГИС, я решил создать новую базу данных (с расширениями ГИС), которую я намерен использовать для хранения только данных геолокации.
В какой-то момент я настроил все так, чтобы все работало на моем компьютере для разработки (это означает, что у меня есть миграции для этих новых моделей). Но теперь, когда код написан, я импортировал дамп БД прямо с сервера, чтобы моя машина для разработки точно отражала производственную машину, и теперь я не могу заставить Юг правильно применить миграции. Похоже, что у South есть несколько функций, позволяющих использовать несколько баз данных, но пока ни одна из них не работает.
Что я пробовал:
Просто добавьте модель и мигрируйте. Это дает мне следующую ошибку:
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
Итак, Юг пытается создать модель в исходной базе данных, которая не имеет расширений ГИС.
Добавление модели, но указание базы данных «гео» для переноса приложения «гео». Это дает мне следующую ошибку:
django.db.utils.DatabaseError: relation "south_migrationhistory" does not exist
Я предполагаю, что юг ожидает, что его таблица MigrationHistory также будет существовать в базе данных «гео»?
Разрешить существование моделей юга в моей базе данных «гео».
$ python manage.py syncdb --database=geo $ python manage.py migrate
Это дает мне следующую ошибку:
django.db.utils.DatabaseError: relation "<model>" already exists
Я предполагаю, что это потому, что у меня уже есть MigrationHistories, хранящиеся в другой базе данных?
Судя по всему, у South есть малодокументированная функция под названием «dbs» (см.: http://south.aeracode.org/docs/databaseapi.html#accessing-the-api ) Поэтому я снова попробовал предыдущие три метода, заменив все экземпляры «db» на «dbs['geo']».
а. Миграция проходит гладко, но на самом деле не создает никаких таблиц в моей базе данных «гео».
б. Та же ошибка, что и при неиспользовании функций 'dbs'.
в. Та же ошибка, что и при неиспользовании функций 'dbs'.
Весь этот процесс был крайне разочаровывающим. Кто-нибудь получил поддержку нескольких баз данных при использовании South?