Django利用/从其他数据库提取数据

2024-06-02 09:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我下面的问题早在2013年就有人回答了。但我正在寻找更强大和最新的解决方案,如果有的话。在

我有一个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

如您所见,在上面的模型中,我有机会编号,我希望用户输入sales_order,而不是输入opportunity_number,它可以是自动完成文本框(理想情况下)或由salesforcedb中的表填充的下拉列表。到目前为止,我已经能够描述设置.py. 有人能给我指出正确的方向吗?在

^{pr2}$

Tags: 数据django用户模型numbermodelsordersalesforce
3条回答

首先,你需要一个数据库路由器为你的应用程序,我会尝试做一些类似的事情,你需要什么样的信息给定

附录1/路由器.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

在你的设置.py文件添加以下内容

^{pr2}$

您可以使用inspectdb命令创建现有数据库的模型,例如:

./manage.py inspectdb  database "sap"

我希望有帮助

来源:个人经验和Django文档https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

其他答案已经提到了这个问题的多数据库特性,并链接到文档。在

您可能希望使用类似Django REST框架的东西来运行对其他表的访问,作为应用程序其余部分的一个迷你服务,而不是在视图代码中尝试上下文切换DB调用。在

例如,如果您需要在SAPSalesForce表中查找数据,您可以使用该ID向后端服务发出Ajax请求,它将向您发送一个JSON答案,其中包含您需要的任何内容。在

这样,您就可以抽象关系并在将来更改实现细节,而不必重写大量代码。在

Django支持多个数据库,如下所述:

https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

假设将主数据库设置为主数据库,则必须确保在从其他数据库读取数据时指定要访问的数据库。在

相关问题 更多 >