我下面的问题在2013年的here中得到了一定程度的回答。但我正在寻找更强大和最新的解决方案,如果有任何。
我有一个Django应用程序app1,我想捆绑在Django从其他数据库谁是每天不断更新的数据。例如:在app1中,我有一个模型model,其中用户必须从sap输入销售订单,并从salesforce输入相应的商机编号。我有工具可以将数据从sap转储到sapdb,将salesforce转储到salesforcedb。
我在app1中的模型如下所示:
class SalesOrderMapping(models.Model):
sales_order = models.CharField("Sales Order #", max_length=10, primary_key=True)
opportunity_number = models.CharField("Opportunity Number", max_length=30)
class Meta:
verbose_name_plural = "Sales Order / Opportunity Mapping"
ordering = ('sales_order', 'opportunity_number')
def __str__(self):
return self.sales_order如您所见,在上面模型中,我有opportunity_number,我希望用户键入sales_order,而不是键入opportunity_number,它可以是自动完成文本框(理想情况下),也可以是由salesforcedb中的表填充的下拉列表。到目前为止,我已经能够用settings.py描述数据库了。有人能告诉我正确的方向吗?
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoportal',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
},
'sap': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sapdb',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
},
'sfdc': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'salesforcedb',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}发布于 2017-03-30 18:57:40
首先,您需要为您的应用程序提供一个数据库路由器,我将尝试使用给定的信息执行与您所需的操作类似的操作
app1/routers.py
class App1Router(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'app1':
return 'default'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to app1.
"""
if model._meta.app_label == 'app1':
return 'default'
return None
def allow_relation(self, obj1, obj2, **hints):
db_list = ('default', 'sap', 'sfdc')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True并在您的settings.py文件中添加以下内容
DATABASE_ROUTERS = ['app1.routers.App1Router',]您可以使用检查数据库命令来创建现有数据库的模型,例如:
./manage.py inspectdb --database "sap"我希望它能帮上忙
来源: Personal experience和Django文档https://docs.djangoproject.com/en/1.10/topics/db/multi-db/
https://stackoverflow.com/questions/42985769
复制相似问题