Управление базами данных в моделях Django, sqlite и mongoengine

Я разрабатываю какой-то проект на Django, что-то для управления активами на складах. Я хочу использовать для этого две базы данных. Во-первых, это база данных sqlite, которая содержит любые данные о пользователях. Во-вторых, это база данных mongoDB, в которой нужно хранить все данные, относящиеся к активам. Вопрос в том, как сообщить моим классам моделей, какую базу данных они должны использовать (модели, отвечающие за регистрацию пользователей и т. Д. - sqlite, модели, отвечающие за управление данными активов - mongoDB)? Я читал о DATABASE_ROUTERS и использовании Meta классов, но это решения для поддерживаемых Django баз данных (или, может быть, я чего-то не знаю), я не знаю, хорошо ли это и можно ли интегрировать его с mongoengine.

Спасибо за совет!


person Marcin Poliński    schedule 15.11.2016    source источник


Ответы (2)


Это может вам помочь:

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

Settings.py

# Define the database manager to setup the various projects
DATABASE_ROUTERS = ['manager.router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {'app1': 'db1', 
                         'app2':'db2'}

DATABASES = {
    #For login authentication of both app I have used postgres sql
    'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': 'fail_over',                    
            'USER': 'SomeUser',                      
            'PASSWORD': 'SomePassword',                  
            'HOST': '127.0.0.1',                     
            'PORT': '',                      
    },
    # Set this parameters according to your database configuration
    'db1': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_DIR, 'yourdatabasename.db'),
    },
     # Set this parameters according to your database configuration
    'db2' : {
      'ENGINE' : 'django_mongodb_engine',
      'NAME' : 'my_database'
   }
}

Образцы моделей

# Create your models here for app1.
class Modelapp1(models.Model):
    field1 = models.TextField(max_length=100)
    field2 = models.TextField(max_length=200)

    class Meta:
        app_label = 'app1'

    def __unicode__(self):
        return self.field1
# Create your models here for app2.

class Modelapp2(models.Model):
    field1 = models.CharField(max_length=25)

    class Meta:
        app_label = 'app2'

    def __unicode__(self):
        return self.field
person Piyush S. Wanare    schedule 15.11.2016
comment
Очень хорошее решение, но не в моем случае. Я использую mongoengine, а не django_mongodb_engine, поэтому в моем settings.py нет конфигурации mongodb в разделе DATABASES. Моя версия Django - 1.10, я не буду использовать 1.5, потому что она не поддерживается. Подробности в ссылке - person Marcin Poliński; 15.11.2016

Я нашел решение, все очень просто. Если вы хотите, чтобы ваша модель использовала базу данных mongoDB, просто создайте параметр класса модели Document (или EmbeddedDocument, например class Magazine(Document):). но если вы предпочитаете определенный тип базы данных по умолчанию, просто создайте класс, как в документации django (пример class Person(models.Model):).

person Marcin Poliński    schedule 22.11.2016
comment
можешь дать более подробное описание? У меня такая же проблема. Что мне делать с settings.py? - person Miguel; 30.10.2017
comment
Вам не нужно делать никаких дополнительных вещей в вашем settings.py. Если вы хотите создать модель для первичной базы данных (sqlite или mysql), создайте класс модели, который наследует models.Model, в противном случае (модель для mongodb) наследует Document (из импорта mongoengine *) - person Marcin Poliński; 30.11.2017