0

現在、Django でアプリケーションを開発しています。これは、WareHouse Management 用の ERP です。そしてメインアプリはSAP Business Oneで作っています。SAP (MSSQL Server) のテーブルにアクセスできますが、Django dataModel テーブル内の SAP のテーブル ITEM を使用して WareHouse Management を構築する必要があります。 > SAP の ITEM [いいえ!])。

Django の DataModel を他のデータベース システムまたはテーブルと同期するための最良の方法は何ですか?

Django データベースの一貫性を維持したいと思います。SAP のアイテムのテーブルで何かを変更すると、たとえばアイテム アクティブ (true または false) この変更が Django モデルに反映されるためです。

したがって、SAP テーブルに新しい項目がある場合、それは Django DataModel テーブルにある必要があります。

これを維持するために、単純なDjangoモデルを試しています:

class Items(models.Model):
    SapCode         =models.CharField(max_length=100)
    Name            =models.CharField(max_length=250)
    Group           =models.IntegerField()
    Active          =models.BooleanField()

私は次の変更のみを追跡します。

  • 新しいアイテム (新しいコード)

  • 名前の変更。

  • グループの変更。

  • アクティブでステータスを変更

前もって感謝します!。

4

2 に答える 2

1

Django には「データ同期の最良の方法」はありません。

実際、これはデータ モデルをどのように設計するかがすべてです。

いくつかのヒント:

  1. 各オブジェクトのソース システムの一意の識別子を把握します。通常、これは「id」などのようなものです。
  2. 常に、常に、モデルの作成日と変更日を保存してください。これにより、同期が容易になります。私は通常、次のようにします。

    created_on = models.DateTimeField('Created On', auto_now_add=True)
    last_modified = models.DateTimeField('Last Modified', auto_now=True)
    
  3. これらの 2 つのビット (および保存する必要がある他のすべてのフィールド) があれば、ソース システムからすべてのレコードを取得し、所有しているレコードと照合するコードを記述するだけです。これは面倒なプロセスであり、完全に手動です。このタイプのプロジェクトには「django-magic-model-sync」というものはありません。ソースからレコードを取得し、それらをデータ ストアと照合し、更新する必要があるものを更新するという大変な作業だけです。

  4. この同期を X 分、X 時間、X 日などごとに実行したいと思うので、Celery を使用することをお勧めします。したがって、#3 を実行する Celery タスクを作成する必要があります。
于 2013-02-26T09:11:22.120 に答える
0

複数のデータベースで Django を使用できます。

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'items': {
        'NAME': 'items_data',
        'ENGINE': 'django.db.backends.mysql',# or what ever Engine 
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }

}

専用のデータベースのみを同期できます。

./manage.py syncdb --database=items

モデルでは、次のように使用できます。

Items.objects.using('items').all()
于 2013-07-18T02:09:21.580 に答える