Эй, ребята, у меня есть проблема. Есть приложение, которое я создал с использованием django, и оно работает на postgresql. Приложение работает отлично, но до недавнего времени меня просили перенести определенные данные таблиц в моделях приложения django в удаленную базу данных Oracle. Например, у меня есть модель, которая выглядит следующим образом:

 class SimRegistrationForm(models.Model):
    mobile_number = models.IntegerField('Mobile Number',max_length=10, null=False, blank=False)
    alternative_number = models.IntegerField('Alternative Number',max_length=10, blank=True, null=True)
    date = models.DateField('Date', blank=False, null=False)
    honorifics = models.CharField('Honorific', max_length=10, choices=HONORIFIC, blank=False, null=False)
    first_name = models.CharField('First Name',max_length=30, blank=False, null=False)
    middle_name = models.CharField('Middle Name',max_length=30, blank=True, null=True)
    last_name = models.CharField('Last Name',max_length=30, blank=False, null=False)
    dob = models.DateField('Date of Birth', blank=False, null=False)
    nationality = models.CharField(max_length=30, null=False, blank=False)

Я задавал этот вопрос раньше на этом форуме, но не получил такой большой помощи с очень небольшим ответом. Как я могу быть в состоянии достичь этого? Я знаю, что django поддерживает несколько соединений с базой данных, основываясь на том, что я прочитал здесь https://docs.djangoproject.com/en/dev/topics/ дБ / мульти - дБ / Я хотел бы, чтобы некоторые данные таблицы передавались в удаленную базу данных Oracle в режиме реального времени, и данные также должны оставаться в базе данных postgres. Как я могу достичь этого?

2
roykasa 23 Янв 2013 в 09:55

2 ответа

Лучший ответ

Похоже, вы хотите скопировать данные из postgresql в oracle для какой-то конкретной модели.

MultiDB не предназначен для репликации, но с последней версией Django вы можете справиться с этой задачей.

Сконфигурируйте Django с двумя базами данных, postgresql по умолчанию и оракул в качестве второй базы данных. Допустим, вы назвали вторую базу данных базы данных "orcl":

  1. создать ту же таблицу, которую вы хотите скопировать в базе данных оракула
  2. написать собственный метод «save» в модели Django, который вызывает super() метод «save», а также super(YourModel, self).save(using='orcl')

Должно быть что-то вроде этого (не проверено):

def save(self, *args, **kwargs):
    super(YourModelName, self).save(*args, **kwargs)
    kwargs.update({'using' : 'orcl'})
    super(YourModelName, self).save(*args, **kwargs)

[Обновить]

Комментарий от OP: Но теперь проблема в том, что я не хочу отправлять все данные таблицы в удаленную базу данных. Я просто хочу отправить несколько столбцов в удаленную базу данных. Можно ли добиться этого с помощью аналогичного метода

Я думаю, что это возможно. Сохранение одного и того же ПК в обеих базах данных облегчит вашу жизнь:

def save(self, *args, **kwargs):
    super(YourModelName, self).save(*args, **kwargs)
    remote = OtherModel(
        id = self.id,
        some_field = self.some_field,
        another_field = self.another_field,
    )
    remote.save(using='orcl')

Дайте мне знать, если это работает. Вы должны либо: 1) определить OtherModel и создать соответствующую таблицу в удаленной базе данных, либо 2) создать удаленную таблицу и использовать manage.py inspectdb для создания модели.

1
Paulo Scardine 23 Янв 2013 в 06:51

Используйте какой-либо инструмент репликации базы данных. Поскольку это две разные базы данных, ваши варианты не очень много. Мне известно только о Oracle GoldenGate, и я не знаю не знаю, хорошо ли это

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

1
Lennart Regebro 23 Янв 2013 в 06:25