【问题标题】:Connecting to multiple mongodb instances from django从 django 连接到多个 mongodb 实例
【发布时间】:2011-05-20 04:59:07
【问题描述】:

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

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

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

【问题讨论】:

  • 这有什么问题?问题是什么?您还想如何连接到任何数据库而不在 some 点显式打开显式数据库连接?

标签: django mongodb mongoengine


【解决方案1】:

在 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"}

【讨论】:

  • 但有一件事……这不适用于 DynamicDocuments,尤其是。当需要在运行时动态添加元时
【解决方案2】:

@Ricardo 在官方文档中有一节解释上下文管理(即使用同一文档切换数据库:http://docs.mongoengine.org/guide/connecting.html#switch-database)。 下面的代码会将原来存储在users-db中的User类切换到新的数据库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'

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多