mongoengine 多个连接示例?

0 投票
2 回答
3513 浏览
提问于 2025-04-17 10:13

我在用django搭配mongoengine。

在我的项目网页应用中,我需要连接至少两个服务器:一个是本地的,用来处理会话,另一个是连接到mongolab(一个提供mongodb托管服务的公司)。

所以,我需要连接本地服务器来处理会话,同时又要连接到远程的另一个服务器。

我该如何在mongoengine中实现多个连接呢?

请给我一些例子。


a Web application   --- connecting ---> localhost for session
                    --- connecting ---> mongolab for application database

2 个回答

1

根据mongoengine的文档,如果你想使用多个数据库,可以用connect()这个方法,并给连接起个别名。在后台,这个方法会用register_connection()来存储数据,如果需要的话,你可以提前注册所有的别名。

connect(alias='user-db-alias', db='user-db')
connect(alias='book-db-alias', db='book-db')
connect(alias='users-books-db-alias', db='users-books-db')

class User(Document):
    name = StringField()

    meta = {'db_alias': 'user-db-alias'}

class Book(Document):
    name = StringField()

    meta = {'db_alias': 'book-db-alias'}

class AuthorBooks(Document):
    author = ReferenceField(User)
    book = ReferenceField(Book)

    meta = {'db_alias': 'users-books-db-alias'}

你还可以使用switch_db()这个方法来切换数据库。

如果你想断开某个特定的连接,可以用disconnect()这个函数。这个函数可以用来全局改变连接:

from mongoengine import connect, disconnect
connect('a_db', alias='db1')

class User(Document):
    name = StringField()
    meta = {'db_alias': 'db1'}

disconnect(alias='db1')

connect('another_db', alias='db1')
1

使用mongoengine的开发版本。这个版本支持多个数据库连接,并且可以使用别名。你可以查看这个链接了解更多信息:https://github.com/hmarr/mongoengine/commit/8d2bc444bb64265f78f5bf716f773742dddd56c1

可以看看这些测试案例。

测试的具体内容在这里:https://github.com/hmarr/mongoengine/blob/dev/tests/document.py#L2584

撰写回答