在Django中SAP和DataModels之间同步数据

时间:2013-02-26 07:57:29

标签: python database django database-design sap

现在我正在Django下开发一个应用程序,它是WareHouse Management的ERP。主要应用程序是使用SAP Bussiness One制作的。我可以访问SAP(MSSQL Server)中的表,但是我需要在DJANGO dataModel表中使用SAP中的表ITEM构建WareHouse管理,例如:我需要将Django中的DataModel表项与表ITEM SAP同步,而不是反向(DJANGO - > ITEM在SAP [NO!])。

将Django中的DataModel与其他数据库系统或表同步的最佳方法是什么?

我想在Django数据库中保持一致性,因为如果在SAP的Item表中更改某些内容,例如Item Active(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()

我只跟踪以下内容的变化:

  • 新商品(新代码)

  • 名称变更。

  • 群组的变化。

  • 更改状态 在Active

提前致谢!

2 个答案:

答案 0 :(得分: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. 有了这两个位(以及你需要存储的所有其他字段),它只是一个问题或编写代码,它将从源系统中检索所有记录并根据您拥有的记录进行检查。这将是一个繁琐的过程,完全是手动的。这类项目没有“django-magic-model-sync”的东西。只需从源中获取记录,根据数据存储检查记录,以及更新需要更新的内容,这是一项艰苦的工作。

  4. 你可能想要使用Celery,因为我想你每隔X分钟,几小时,几天或其他什么都想要同步。所以你要写一个#3。
  5. 的Celery任务

答案 1 :(得分: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

在您的模型中,您可以像Eg:

一样使用
Items.objects.using('items').all()