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

特定のモデルについて、postgresqlからoracleにデータを複製したいようです。

MultiDBはレプリケーション用に考案されていませんが、最近のバージョンのDjangoを使用すると、このスタントを引き出すことができます。

デフォルトとしてpostgresql、2番目のデータベースとしてoracleの2つのデータベースを使用してDjangoを構成します。2番目のデータベースデータベースを「orcl」と呼んだとしましょう。

  1. Oracleデータベースに複製するのと同じテーブルを作成します
  2. 「save」メソッドを呼び出すカスタムの「save」メソッドをDjangoモデルに記述しますsuper()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 に答える
1

ある種のデータベース レプリケーション ツールを使用します。2 つの異なるデータベースであるため、選択肢はそれほど多くありません。私はOracle の GoldenGateしか知らないので、それが良いかどうかはわかりません。

データを頻繁に同期する必要がない場合は、データをダンプ、変換、およびロードする独自のスクリプトを、たとえば毎晩などにロールすることができます。

于 2013-01-23T06:25:13.070 に答える