以下面的方式使用“with”来处理关闭连接
custcmd = "mongodb+srv://{}:{}@{}/{}?retryWrites=true&w=majority".format(username,pwd,host,dbname)
with MongoClient(custcmd.format(username,pwd)) as client:
mydatabase = client[dbname]
mycollection=mydatabase[collectionname]
count = mycollection.count_documents({})
在“with”块之外尝试了下面的代码,但仍然得到计数。我怀疑它是否有效
count = mycollection.count_documents({})
print(count)
我使用“with”的方式正确还是有什么问题?即使在client.close()之后也可以从db获取数据 那么如何使用连接?
答案 0 :(得分:0)
MongoClient 有自动重新打开,所以关闭连接没问题,但如果您进行后续调用,连接将重新打开。
<块引用>close() ... 关闭连接池中的所有套接字并停止监视器 线程。如果再次使用此实例,它将自动 除非启用自动加密 (Reference)
,否则重新打开并重新启动线程在 with 块中定义的变量与在 for 循环中定义的变量的工作原理相同;只要它们已经初始化,它们就可以在块之外使用。
所以一切都按预期进行。
关键要点:您无需担心清理连接 - pymongo 会为您处理所有这些。只需打开您的连接,做您的事情,就是这样。
如果您真的想确保不会意外地重复使用现有连接,最好的方法就是将任何变量设置为 None,例如
client = MongoClient(custcmd.format(username,pwd))
mydatabase = client[dbname]
mycollection=mydatabase[collectionname]
count = mycollection.count_documents({})
# All done, make sure we don't reconnect by accident!
client = mydatabase = mycollection = None