即使关闭连接,也能从 Mongo DB Atlas 获取数据吗?

时间:2021-03-07 12:47:19

标签: pymongo

以下面的方式使用“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获取数据 那么如何使用连接?

1 个答案:

答案 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