尝试使用Python连接MongoDB Atlas时,连接超时。

7

我正在尝试连接我的MongoDB Atlas集群,但是每当我尝试对我的数据库进行操作时,我都会超时。

我使用的数据库是在mongoshell中创建的,我也在MongoDB Compass中检查了它们的存在。

错误

pymongo.errors.ServerSelectionTimeoutError: projekt-shard-00-01-rk7ft.mongodb.net:27017: timed out,projekt-shard-00-00-rk7ft.mongodb.net:27017: timed out,projekt-shard-00-02-rk7ft.mongodb.net:27017: timed out

代码

client = MongoClient("""mongodb://user:password@projekt-shard-00-00-rk7ft.mongodb.net:27017,projekt-shard-00-01-rk7ft.mongodb.net:27017,projekt-shard-00-02-rk7ft.mongodb.net:27017/projekt?ssl=true&replicaSet=projekt-shard-0&authSource=admin""")

    client.projekt.category.insert_one({type : "pants"}).inserted_id

2
请检查您连接到Atlas实例的IP地址是否已加入白名单,并且没有客户端防火墙阻止您创建与Atlas的连接。 - kevinadi
我的IP地址已被加入白名单,客户端防火墙可能是原因,我会检查一下,感谢您的回复。 - Alex
4个回答

6

所以问题出在你的IP地址上面,

  1. 进入MongoDB Atlas中的网络访问面板
  2. IP访问列表部分,你会找到所有的IP地址
  3. 点击正在使用的当前IP地址的编辑选项卡
  4. 在那里将设置更改为允许从任何地方访问

就是这样,它会起作用!


我已经搬到了其他地方,我的IP地址也发生了变化。因此,它不再在白名单中。 - Ricardas

1
我遇到了这个问题几个小时。奇怪的是,它似乎是一个连接问题,但没有抛出错误验证或其他任何错误,只是超时。客户端对象似乎已经被创建(我可以打印其属性)。我继续尝试并且某种程度上奏效了:
  • 在MongoDB GUI中,导航至数据库访问
  • 添加一个测试用户,该用户与设置初始用户具有相同的读/写权限
  • 将Python中的连接字符串更改为新用户的用户名+密码
  • 运行代码
对我来说,它最终成功连接并插入。之后,原始用户的连接字符串现在也有效,因此我删除了测试用户。
我无法确定这个问题的根本原因,但似乎数据库用户表只需要执行某些操作才能刷新并开始接受用户连接。

谢谢您的回复,我当时解决了这个问题,但不幸的是我现在无法回忆起当时是如何解决的。我相信我的解决方法与您的不同,但还是感谢您的回复! - Alex
1
哇,都已经2022年了,这个问题还存在,而且解决方法仍然有效。哈哈 - Yen Hung Liu

1
任何想要解决问题的人,如果你试图从外部访问Atlas实例,请检查“网络访问”选项卡,因为我认为您必须将所有或特定IP地址列入白名单。

0
我通过在数据库URI的末尾添加"?ssl=true"来修复了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接