Django Rest Framework несколько баз данных - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в Django и пытаюсь понять, как Django может использовать две базы данных для моего приложения.

  • База данных 1 - я хочу использовать систему Django

  • База данных 2 - это существующая база данных с данными, и я хочу сделать это такданные доступны в моем Django API, как на картинке ниже:

Arquitetura da API

Спасибо всем

1 Ответ

0 голосов
/ 18 сентября 2018

Я делаю это с DRF и Django. Использовать маршрутизатор базы данных

Это мой маршрутизатор, в котором каждый набор моделей для другой базы данных идет в отдельный файл.

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'
    },

   },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...