在Django中同步SAP与数据模型的数据
我现在正在开发一个基于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中,其实没有什么“最佳的数据同步方法”。
这主要是看你自己怎么设计数据模型。
这里有几个小建议:
- 首先,找出你数据源中每个对象的唯一标识符。通常这就是“id”或者其他类似的东西。
一定要在你的模型中存储创建和修改的日期。这会让同步变得更简单。我通常是这样做的:
created_on = models.DateTimeField('Created On', auto_now_add=True) last_modified = models.DateTimeField('Last Modified', auto_now=True)
有了这两个信息(还有你需要存储的其他字段),接下来就是写代码,从数据源中获取所有记录,并和你已有的记录进行对比。这会是一个繁琐的过程,而且完全是手动的。对于这种项目,没有什么“django魔法模型同步”的东西。你需要做的就是从源头获取记录,检查它们和你的数据存储,然后更新需要更新的部分。
- 你可能会想用Celery,因为我想你会希望每隔X分钟、小时或天来进行一次同步。所以你需要写一个Celery任务来完成第3步。