2011-05-20 77 views
3

我正在使用mongoengine和Django,并且在我的项目中需要在提供单个请求时连接到两个MongoDB实例。从django连接到多个mongodb实例

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

但我想知道,如果这就是做这件事的正确方法:如果我用它工作得很好。

+0

什么是什么问题?什么是问题?如果没有在* some *点明确打开数据库连接,你还想连接到任何数据库吗? – 2011-05-20 05:54:44

回答

10

Multiple database支撑在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"} 
+0

虽然有一件事...这不适用于DynamicDocuments,尤其是,当元数据需要在运行时动态添加时 – qre0ct 2017-04-27 09:29:05

0

我认为那里s no a proper way to do this. The example of Matt turns obrigatory use an connection by Document type. If i want to use one document with many connections the example don吨适合。

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' 
+0

除了源URL之外,还应该包含相关信息 – winwaed 2015-08-31 15:22:20