嘿伙计们我有问题。我使用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数据库中。我怎样才能实现这一目标?
答案 0 :(得分:1)
使用某种数据库复制工具。由于它是两个不同的数据库,因此您的选择并不是很多。我只知道Oracle's GoldenGate,我不知道它是否有用。
如果您不需要经常同步数据,您可以滚动自己的脚本来转储,转换和加载数据,比如说每晚都会这样。
答案 1 :(得分:1)
好像你想将某些特定模型的数据从postgresql复制到oracle。
MultiDB不是为了复制而设想的,但是使用最新版本的Django,你可以解决这个问题。
使用两个数据库配置Django,默认情况下为postgresql,第二个数据库为oracle。假设您调用了第二个数据库数据库“orcl”:
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的评论:但现在问题是我不想将表的所有数据发送到远程数据库。我只想将一些列发送到远程数据库。是否可以通过类似的方法实现这一目标
我认为这是可能的。在两个数据库上保持相同的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
来创建模型。