Python 将表数据从django postgres模型推送到远程oracle数据库

Python 将表数据从django postgres模型推送到远程oracle数据库,python,django,oracle,postgresql,Python,Django,Oracle,Postgresql,嘿,伙计们,我有个问题。我使用django构建了一个应用程序,它在postgresql上运行。该应用程序工作得很好,但直到最近,我还被要求将django应用程序模型中的特定表数据推送到远程oracle数据库。例如,我有一个模型如下所示: class SimRegistrationForm(models.Model): mobile_number = models.IntegerField('Mobile Number',max_length=10, null=False, blank=

嘿,伙计们,我有个问题。我使用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根据我在这里读到的内容支持多个数据库连接
我希望它能够将一些表数据实时推送到远程oracle数据库,并且数据也应该保留在postgres数据库中。我怎样才能做到这一点

使用某种数据库复制工具。因为它是两个不同的数据库,所以您的选择不多。我只知道,我不知道这有什么好处


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

似乎您想要将数据从postgresql复制到oracle以用于某个特定模型

MultiDB并不是为复制而设计的,但有了最新版本的Django,您就可以实现这一特技

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

  • 创建要在oracle数据库中复制的表
  • 在Django模型中编写一个自定义的“save”方法,该方法调用
    super()
    “save”方法以及
    super(YourModel,self)。save(使用class='orcl')
  • 应该是这样的(未经测试):

    [更新]

    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)定义另一个模型并在远程数据库中创建相应的表,或者2)创建远程表并使用
    manage.py inspectdb
    创建模型。

    是的,我似乎必须编写自己的脚本,将数据转储并加载到oracle数据库中。但现在的问题是我不想发送所有数据将表的数据传输到远程数据库。我只想向远程数据库发送一些列。有没有可能用类似的方法实现这一点。答案已更新(请记住,您必须定义OtherModel并在远程数据库上创建其表)是的,您已经看到了更新。但是我可以只向远程数据库发送某些列,比如日期、尊称、名字、姓氏。其他模型应该只包含要发送到远程数据库的列子集。我刚想到我的解决方案不是处理删除,因为你可以使用.Ohhh。。。好啊酷。我会试一试的。因此,基本上我创建了一个新模型,其中包含要发送到远程数据库的列。它是实时的,不需要重复输入数据吗?我的意思是,如果他们在原始模型中输入数据,它也应该自动写入其他模型列中。。。
    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')