MongoEngine: Close connection

半城伤御伤魂 提交于 2019-12-23 07:58:03

问题


I spent ages trying to find a simple example where MongoEngine was being used and a connection was being closed. Finally figured it out and posting my code.


回答1:


I know this is an old question, but if anyone else is searching I figured I'd give an alternate answer.

close() does not actually remove the connection from MongoEngine's connection list. This causes problems when trying to connect to a different database later on.

To solve this I used mongoengine.connection.disconnect (even though it's not listed in __all__). My code looks like this:

from mongoengine import connect
from mongoengine.connection import disconnect

db = connect(alias='some_alias')

{do stuff}

disconnect(alias='some_alias')

You can also leave the alias out as it will default to 'default' in both connect and disconnect.




回答2:


I thought disconnect() was supposed to be used initially, but it has been removed as a synonym for close().

from mongoengine import connect

def main():

    #connect to db
    db_client = connect('my_db', host='localhost', port=27017)

    #close the connection
    db_client.close()

if __name__ == "__main__":
    main()



回答3:


It can be managed with Connection class like bellow. It creates connection with __enter__ and closes it with __exit__ method.

from mongoengine import connect
from app.config import config


class Connection:
    def __enter__(self):
        self.conn = connect(host=config.mongo_url)
        return self.conn

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.conn.close()

Then you can use it with "with" statement.

from app.connection import Connection

with Connection():
     # do some stuff with db, connection will be closed after with statement
     pass 


来源:https://stackoverflow.com/questions/43866098/mongoengine-close-connection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!