2013-05-17 300 views
0

我想就我遇到的问题提出一个问题,并且我缺乏经验,我不确定这是否是最佳选择。从其他数据库获取数据

目前我们已经在我们的服务器中安装了“OCS库存报告”,它保持我们拥有的所有计算机的更新清单。 我们的意图是使用这些数据在我们的django管理网站上查看。 首先,我将在ouer应用程序中创建所有模型。 在管理站点中创建计算机并保存时,OCS数据库中的信息将被导入到另一个数据库。

我不知道这是否是最好的方法。 我不知道django提供的所有可能性。 每次创建新对象时导入数据会很有效? 在管理界面中显示信息而不将其导入到我的应用程序并直接攻击其他数据库的机会? (对不起我的英文不好)

+0

有什么问题吗?你需要更具体地了解你的问题?您是问如何使用多个数据库,或者如何手动将行插入到单独的数据库中? –

回答

1

我假设你想Django管理只准备了OCS数据库。

首先你需要在数据库中的设置定义外部数据库:

DATABASES = { 
    'default': { 
     ... django db settings here ... 
    }, 
    'ocs_db': { 
     'ENGINE': 'django.db.backends.mysql', 
     'OPTIONS': { 
      'read_default_file': '/path/to/my.cnf', 
     }, 
    } 
} 

你可以给python manage.py inspectdb --database ocs_db一试; inspectdb查找数据库上的表并将模型定义转储为python模块。 如果这不起作用,那么你必须手动完成。

那么你一定要Django的不是管理该表(所以没有行会被删除,并且对表中没有操作会做),你可以做到这一点通过元管理选项。

我建议你写一个基类使用此选项(最终其他的定制你需要的所有OCS型号)。

class OCSBaseModel(models.Model): 

    def save(self): 
     """ 
     avoid inserts/edits from model 
     """ 
     return 

    class Meta(): 
     abstract = True 
     managed = False 


class Workstation(OCSBaseModel): 
    ... 

作为最后一步,您需要指示Django为OCS模型使用正确的数据库。

为此,您需要编写一个数据库路由器作为记录here

或实现OCS车型的Django模型管理器,每个查询集到数据库中标记。 例如。

class OCSModelManager(models.Manager): 
    def get_query_set(self): 
     return super(OCSModelManager, self).get_query_set().using('ocs_db') 

请注意,我没有测试此代码的任何;)

+0

真棒,谢谢! – Blainn