Django,使用两个具有相同项目的数据库

时间:2014-11-24 14:14:12

标签: django

我在一个大&复杂的django项目。我被要求准备它接受虚拟数据,以测试其生产准备情况(没有人期望“楼上”的决定,所以每个人都被猝不及防)。

为此,我被要求创建另一个数据库(当前数据库的精确副本),以便填充数百万个虚假数据。

如果可能的话,我正在徘徊,将“假数据数据库”与当前项目一起使用,并让它“聪明地”选择要使用的数据库,具体取决于网址(可能)。例如:

http://example.com/login/会映射来自工作数据库的数据,http://test.example/com/login会自动将数据映射到“假数据”数据库。两者都使用相同的django项目和相同的Apache Virtualhost条目。

这有意义吗?或者我应该创建一个全新的django项目(并修改Apache)?

PS:该项目目前正处于开发过程中,因此我们可以使用相同的服务器进行测试和基准测试。

2 个答案:

答案 0 :(得分:1)

您可以在django中使用多个数据库。请参阅:https://docs.djangoproject.com/en/dev/topics/db/multi-db/#multiple-databases

但是根据您的描述,听起来更像是您需要2种不同的环境。一个用于接受此虚拟数据的非生产环境,以及另一个生产环境。您可以拥有2个不同的settings.py,并根据环境导入正确的settings.py。

答案 1 :(得分:0)

如果我理解这个问题,那么这就是我要采取的方法

1)在settings.py文件中(我使用的是mysql)

DATABASES = {
    'default':{},
    'db1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Database_1',
        'USER': '',
        'PASSWORD': '',


    },
    'db2':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Database_2',
        'USER': '',
        'PASSWORD': '',


    }
}

2)在urls.py文件中 (示例网址模式)

urlpatterns = [
    url(r'^/login/$', views.xzy, {'database': 'db1'}),
    url(r'^com/login/$', views.xzy, {'database': 'db2'})

]

3)在xzy(request, database)中,您可以执行以下操作:

records = Model.objects.using(database).all()

您可以使用'数据库路由器'同样。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

这应该在一个简单的环境中工作。如果您使用的是弹性搜索或solr,则需要修改此方法。

希望这有帮助。