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