Django 从其他数据库获取数据

Django 从其他数据库获取数据,django,django-admin,Django,Django Admin,我想问一个问题,我有一个问题,我缺乏经验,我不确定这是否是最好的选择 目前,我们已经在服务器中安装了“OCS库存报告”,它保存了我们所有计算机的更新库存。 我们打算使用这些数据在django管理网站上查看。 首先,我将在ouer应用程序中创建所有模型。 在管理站点中创建并保存计算机时,OCS数据库中的信息将导入ouer数据库 我不知道这是否是最好的办法。 我不知道django提供的所有可能性。 每次创建新对象时导入数据是否有效? 有没有可能在管理界面中显示信息而不将其导入我的应用程序并直接攻击其

我想问一个问题,我有一个问题,我缺乏经验,我不确定这是否是最好的选择

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

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

我想您希望django admin只准备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不要管理该表(这样就不会删除任何行,也不会对该表执行任何操作),您可以通过Meta-managed选项来实现这一点

我建议您使用此选项编写一个基类(以及所有OCS模型最终需要的其他自定义)

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

class OCSBaseModel(models.Model):

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

    class Meta():
        abstract = True
        managed = False


class Workstation(OCSBaseModel):
    ...
为此,您需要编写一个数据库路由器

或者为OCS模型实现django模型管理器,将每个查询集标记到数据库中。 例如


请注意,我没有测试任何这段代码;)

这里有什么问题?你需要更具体地说明你的问题吗?您是在询问如何使用多个数据库,还是如何将行手动插入到单独的数据库中?
class OCSModelManager(models.Manager):
    def get_query_set(self):
        return super(OCSModelManager, self).get_query_set().using('ocs_db')