从django连接到多个mongodb实例

时间:2011-05-20 04:59:08

标签: django mongodb mongoengine

我正在使用mongoengine和Django,并且在我的项目中需要在提供单个请求时连接到两个MongoDB实例。如果我使用它,它可以正常工作:

connect("mdb1")
#do stuff with mdb1
...
connect("mdb2")
#do stuff with mdb2

但我想知道这是否是一种正确的做法。

3 个答案:

答案 0 :(得分:12)

在MongoEngine 0.6中添加了

Multiple database支持

使用register_connection进行演示。

alias_lists = ['users-books-db', 'user-db', 'book-db'] # list of aliases
dbs = ['author-book-pairs', 'users', 'books'] # list of databases
for alias, db in zip(alias_lists, dbs):
    register_connection(alias, db)

class User(Document):
    name = StringField()
    meta = {"db_alias": "user-db"}

class Book(Document):
    name = StringField()
    meta = {"db_alias": "book-db"}

class AuthorBooks(Document):
    author = ReferenceField(User)
    book = ReferenceField(Book)
    meta = {"db_alias": "users-books-db"}

答案 1 :(得分:2)

@Ricardo在官方文档中有一节解释上下文管理(即使用同一文档切换数据库:http://mongoengine-odm.readthedocs.org/en/latest/guide/connecting.html#context-managers)。 以下代码会将最初存储在User中的类users-db切换到新数据库archive-user-db

from mongoengine.context_managers import switch_db

class User(Document):
     name = StringField()

     meta = {"db_alias": "user-db"}

with switch_db(User, 'archive-user-db') as User:
     User(name="Ross").save()  # Saves the 'archive-user-db'

答案 2 :(得分:0)

我认为没有正确的方法来做到这一点。 Matt的例子强制使用Document类型的连接。如果我想使用一个包含许多连接的文档,则该示例不适用。