2

嘿伙计们,我有一个问题。我使用 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/db/multi-db/ 我希望它将一些表数据推送到实时远程 oracle 数据库,数据也应该保留在 postgres 数据库中。我怎样才能做到这一点?

4

2 回答 2

1

使用某种数据库复制工具。由于它是两个不同的数据库,因此您的选择不是很多。我只知道Oracle 的 GoldenGate,不知道好不好用。

如果您不需要经常同步数据,您可以滚动自己的脚本来转储、转换和加载数据,比如每晚左右。

于 2013-01-23T06:25:13.070 回答
1

似乎您想将某些特定模型的数据从 postgresql 复制到 oracle。

MultiDB 不是为复制而设计的,但是使用最新版本的 Django,您可以实现这一特技。

用两个数据库配置 Django,postgresql 作为默认数据库,oracle 作为第二个数据库。假设您将第二个数据库数据库称为“orcl”:

  1. 在 oracle 数据库中创建要复制的同一张表
  2. 在调用super()“save”方法的Django模型中编写一个自定义“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 的评论:但现在的问题是我不想将表的所有数据发送到远程数据库。我只想将一些列发送到远程数据库。是否有可能用类似的方法来实现这一点

我认为这是可能的。在两个数据库上保持相同的 pk 将使您的生活更轻松:

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创建模型。

于 2013-01-23T06:35:30.090 回答