3

我在 Django 中使用 mongoengine,在我的项目中需要连接到 MongoDB 的两个实例,同时提供单个请求。如果我使用它就可以了:

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

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

4

3 回答 3

12

MongoEngine 0.6 中添加了多数据库支持

演示使用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"}
于 2012-03-24T21:57:44.593 回答
2

@Ricardo 在官方文档中有一节解释上下文管理(即使用同一文档切换数据库:http: //docs.mongoengine.org/guide/connecting.html#switch-database)。下面的代码将切换类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'
于 2015-08-31T15:05:04.450 回答
0

我认为没有适当的方法可以做到这一点。Matt 的示例强制使用 Document 类型的连接。如果我想使用具有许多连接的文档,则该示例不适合。

于 2013-04-18T18:54:50.833 回答