在 Django 模型、sqlite 和 mongoengine 中管理数据库

Managing databases in Django models, sqlite and mongoengine

我正在用 Django 开发一些项目,用于管理仓库中的资产。我想为此使用两个数据库。首先是 sqlite 数据库,其中包含有关用户的所有数据。第二个是mongoDB数据库,里面要存储所有与资产相关的数据。问题是,如何告诉我的模型 类,他们应该使用哪个数据库(负责用户注册等的模型 - sqlite,负责管理资产数据的模型 - mongoDB)?我阅读了 DATABASE_ROUTERS 并使用 Meta 类,但它是 Django 支持的数据库的解决方案(或者我可能不知道什么),我不知道它是否好并且可以集成它与mongoengine。

感谢任何提示!

这可能对您有帮助:

我完全同意使用数据库路由器。我所做的是,我使用单一管理界面来处理多个数据库。请注意,所有应用程序的身份验证都存储在默认数据库中。

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

我找到了解决办法,很简单。如果您希望模型使用 mongoDB 数据库,只需创建模型 class Document 参数(或 EmbeddedDocument,例如 class Magazine(Document):)。但如果您更喜欢定义的默认数据库类型,只需创建 class,就像在 Django 文档中一样(示例 class Person(models.Model):)。