在 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):
)。
我正在用 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):
)。