我是django的新手,我想了解django如何为我的应用程序使用两个数据库。
数据库1-我想使用django系统
数据库2是一个有数据的现有数据库,我想让这个数据在我的Django API中可用,就像下面的图像:
Arquitetura da API
谢谢大家

最佳答案

我用drf和django做这个。Use a database router
这是我的路由器,不同数据库的每一组模型都会转到不同的文件。

class DatabaseRouter(object):
    def module_switch(self,model):

        result = 'default'
        if model.__module__.endswith('foo_db1_models'): result = 'foo'
        if model.__module__.endswith('bar_db2_models'): result = 'bar'
        if model.__module__.endswith('baz_models'): result = 'baz'
        if model.__module__.endswith('grid_models'): result = 'grid'
        #print 'here', model.__module__, result, model.__class__.__name__
        return result

    def db_for_read(self, model, **hints):
        return self.module_switch(model)

    def db_for_write(self, model, **hints):
        return self.module_switch(model)

    def allow_relation(self, obj1, obj2, **hints):
        """
        Relations between objects are allowed if both objects are
        in the master/slave pool.
        """
        # db_list = ('master', 'slave1', 'slave2')
        # 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, **hints):
        """
        All non-auth models end up in this pool.
        """
        return True

在settings.py内,指定路由器:
DATABASE_ROUTERS = ['my_proj_foo.db_router.DatabaseRouter']

以及其他数据库:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db'
        'USER': 'foo',
        'PASSWORD': 'bar',
        'HOST': 'db.example.com',
        'PORT': '3306'
    },
    'bar': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bar'
        'USER': 'foo',
        'PASSWORD': 'bar',
        'HOST': 'bar.example.com',
        'PORT': '3306'
    },
    'baz': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'baz',
        'USER': 'foo',
        'PASSWORD': 'bar',
        'HOST': 'baz.example.com',
        'PORT': '5432'
    },

   },

关于python - Django Rest Framework多重数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52394035/

10-12 17:39
查看更多