2 базы данных SQL Server в проекте Django - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблема с загрузкой данных в базу данных 1 (по умолчанию).Видите ли, система должна загружать только те данные, которые находятся в базе данных2 (источник).система работает на машине моего духовника, но загружены два разных порта и используется докер, у меня установлен SQL-сервер.Система запускается, проблема в том, что когда я хочу загрузить данные в базу данных1, она говорит мне, что эти данные не существуют в базе данных2, тогда это не так.Теперь, если я попытаюсь загрузить данные, которых нет в базе данных2, если они загружаются правильно.Я искал, как изменить порты SQL Server, но я не получил его.Кто-нибудь может мне помочь?

DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'database1',
            'HOST': 'name\\name',
            'PORT': '',
            'USER': 'user1',
            'PASSWORD': 'password1',
            'OPTIONS': {
                'driver': 'ODBC Driver 13 for SQL Server',
            }
        },
        'source': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'database2',
            'HOST': 'name\\name',
            'PORT': '',
            'USER': 'user2',
            'PASSWORD': 'password2',
            'OPTIONS': {
                'driver': 'ODBC Driver 13 for SQL Server',
            }
        }

1 Ответ

0 голосов
/ 26 февраля 2019

Это конфигурация: def decide_on_model(model): """Small helper function to pipe all DB operations of a worlddata model to the world_data DB""" return 'source' if model._meta.app_label == 'source' else None

class TutoriasRouter: """ Implements a database router so that:

* Django related data - DB alias `default` - MySQL DB `world_django`
* Legacy "world" database data (everything "non-Django") - DB alias `world_data` - MySQL DB `world`
"""
def db_for_read(self, model, **hints):
    return decide_on_model(model)

# def db_for_write(self, model, **hints):
#     return decide_on_model(model)

def db_for_write(self, model, **hints):
    return 'default'

def allow_relation(self, obj1, obj2, **hints):
    # Allow any relation if both models are part of the worlddata app
    # if obj1._meta.app_label == 'source' and obj2._meta.app_label == 'source':
    #     return True
    # # Allow if neither is part of worlddata app
    # elif 'source' not in [obj1._meta.app_label, obj2._meta.app_label]:
    #     return True
    # # by default return None - "undecided"
    return True

def allow_migrate(self, db, app_label, model_name=None, **hints):
    # allow migrations on the "default" (django related data) DB
    if db == 'default' and app_label != 'source':
        return True

    # allow migrations on the legacy database too:
    # this will enable to actually alter the database schema of the legacy DB!

    # if db == 'source' and app_label == "source":
    #    return True

    return False

`

...