在Django中同步SAP与数据模型的数据

0 投票
2 回答
1565 浏览
提问于 2025-04-17 17:09

我现在正在开发一个基于Django的应用程序,这是一个用于仓库管理的ERP系统。这个主要应用是用SAP Business One制作的。我可以访问SAP中的表格(使用的是MSSQL Server),但我需要在Django的数据模型表中使用SAP的ITEM表来构建仓库管理。例如,我需要将Django中的数据模型表的项目与SAP的ITEM表同步,而不是反过来(也就是说,不是从Django同步到SAP的ITEM表)。

那么,最好的方法是什么,来将Django的数据模型与其他数据库系统或表格同步呢?

我希望在Django数据库中保持一致性,因为如果SAP的ITEM表中有任何更改,比如某个项目的状态变为激活(true或false),这个变化应该在Django模型中反映出来。

所以,如果SAP表中有一个新项目,它也必须出现在Django的数据模型表中。

我正在尝试一个简单的Django模型来保持这个同步:

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

我只需要跟踪以下变化:

  • 新项目(新代码)

  • 名称的变化

  • 组的变化

  • 状态的变化(是否激活)

谢谢大家!

2 个回答

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()
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魔法模型同步”的东西。你需要做的就是从源头获取记录,检查它们和你的数据存储,然后更新需要更新的部分。

  4. 你可能会想用Celery,因为我想你会希望每隔X分钟、小时或天来进行一次同步。所以你需要写一个Celery任务来完成第3步。

撰写回答