在Django模型,sqlite和mongoengine

时间:2016-11-15 05:28:21

标签: python django mongodb sqlite mongoengine

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

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

这可能会对您有所帮助:

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

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

答案 1 :(得分:0)

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