Django - синхронизация данных между несколькими базами данных

StackOverflow https://stackoverflow.com//questions/22072600

Вопрос

в среде с несколькими базами данных, как переместить все данные из базы данных в другую?

Настройки выглядят так:

DATABASES = {
    'default': {},
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': 'user',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'cust',
        'PASSWORD': 'veryPriv@ate'
    }
}
.

Есть ли простое решение / приложение для этого?Хотя односторонняя миграция достаточно, поскольку существуют десятки моделей и объектов со сложным внешним видом и многие ко многим соединениям, итерацией по моделям и объектам, и сохранение их в другое не решает мою проблему.

loaddata тоже не удается, потому что создание объекта использует сигналы для создания объектов Noher, и это портит уникальные ключевые ключи.

Использование SQL Dumps нетривиальнее даже, поскольку бэкэндуки разные.Я пробовал это, мне не удалось сделать Dumps PSQL от моей базы данных sqlite3, которые не бортываются посторонние ключи.

Так что мне нужно решение, которое загружает данные из базы данных в другую, но не отправляет сигналы, а также работает с иностранными ключами.Но я не мог найти ничего, что делает это.

Это было полезно?

Решение

Наконец-то мне удалось решить это.

Я создал таблицы, используя

manage.py syncdb --all
manage.py migrate --fake
.

Загрузка свалов с loaddata не работал из-за проблем с целостностью.(Например, сломанные внешние ключевые ограничения)

Так что мне пришлось изменить свои столы.Я удалил сломанные ограничения, и тогда я мог бы запустить loaddata без проблем.

Однако, конечно, моя база данных все еще была нарушена, так как я бросил пару ограничений.Поэтому мне просто пришлось снова изменить свои таблицы, используя раковину psql.

pgadmin пригодился, так как показывает соответствующие запросы сброса на удобный интерфейс, отдельно для каждого разного ограничения.

Другие советы

Я просто написал сценарий Python для Миграция экземпляра из одной базы данных в другую запустить этот сценарий, используя Django-расширения RunScript

Например

# Move Foo table data from one to another
for each_foo in Foo.objects.using("users").all():
  # _create foo instance in customer_data
  foo_obj, status = Foo.objects.using("customers").get_or_create(
                                            foo_name=each_foo.foo_name, 
                                            foo_code=each_foo.foo_code)
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top