как обрабатывать исключения в нескольких баз данных Django - PullRequest
0 голосов
/ 02 ноября 2018

скриншот с ошибкой

try:
    DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'jobstar',
        }
    }
except:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'jobstar'),
        }
    }

Как я могу обработать исключение с настройками базы данных в Django. моя основная база данных - mongodb, как показано. я хочу, когда mongo не запущен или не установлен в системе, он будет использовать sqlite (вторичную) базу данных.

Я пытаюсь сделать это вышеописанным способом, это выдает мне ошибки. пожалуйста, загляните в мой код

    t__
        self.loader = MigrationLoader(self.connection)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
        self.build_graph()
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 206, in build_graph
        self.applied_migrations = recorder.applied_migrations()
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
        if self.has_table():
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 44, in has_table
        return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/backends/base/introspection.py", line 56, in table_names
        return get_names(cursor)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/django/db/backends/base/introspection.py", line 51, in get_names
        return sorted(ti.name for ti in self.get_table_list(cursor)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/djongo/introspection.py", line 46, in get_table_list
        for c in cursor.db_conn.collection_names(False)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/database.py", line 715, in collection_names
        nameOnly=True, **kws)]
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/database.py", line 674, in list_collections
        read_pref) as (sock_info, slave_okay):
      File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
        return next(self.gen)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1099, in _socket_for_reads
        server = topology.select_server(read_preference)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/topology.py", line 224, in select_server
        address))
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/topology.py", line 183, in select_servers
        selector, server_timeout, address)
      File "/home/soubhagya/Desktop/worke/rmaze-partner/rmaze-partner-env/lib/python3.6/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
        self._error_message(selector))
    pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused

1 Ответ

0 голосов
/ 02 ноября 2018

Если я правильно вас понял, вы пытаетесь создать базу данных для отработки отказа, если ваша база данных по умолчанию недоступна.

Взгляните на это руководство https://n3tc4t.github.io/blog/simple-dbha-for-django-app

или этот пакет: https://pypi.org/project/django-failover/

...