【问题标题】:Managing databases in Django models, sqlite and mongoengine在 Django 模型、sqlite 和 mongoengine 中管理数据库
【发布时间】:2016-11-15 05:28:20
【问题描述】:

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

感谢您的提示!

【问题讨论】:

    标签: python django mongodb sqlite mongoengine


    【解决方案1】:

    这可能会对您有所帮助:

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

    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
    

    【讨论】:

    • 这是非常好的解决方案,但在我的情况下不是。我正在使用mongoengine,没有django_mongodb_engine,所以在我的settings.pyDATABASES 部分没有mongodb 配置。我的 Django 版本是 1.10,我不会使用 1.5,因为它不受支持。详情在link
    【解决方案2】:

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

    【讨论】:

    • 你能给出更详细的描述吗?我有同样的问题。我该怎么处理settings.py?
    • 您不必在 settings.py 中添加任何其他内容。如果要为主数据库(sqlite 或 mysql)创建模型,请创建模型类以继承 models.Model,否则(mongodb 的模型)继承 Document (from mongoengine import *)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2020-10-12
    • 2013-03-07
    • 1970-01-01
    • 2016-11-24
    • 2020-07-22
    相关资源
    最近更新 更多