[英]Mongodb Server Selection Timeout Error target machine refused connection
目的:
使用 Python 連接到 MongoDB db/collection。
問題:
目標機器是本地 windows Mongodb。 在 Jupyter 中運行。 這是第一次嘗試通過 Python 與 MongoDB 建立連接。 MongoDB 指南針處於活動狀態,我創建了一個本地主機,身份驗證無新連接。 集合“db_analytics”已創建並可見。 代碼確實可以正常工作,“MongoDB 連接成功”。 代碼因“collection.insert_one()”function 上的超時錯誤而失敗。 目標機器拒絕連接的一些原因是什么? 我在這里缺少的 python 連接還有其他方法嗎?
Python代碼
import os
import datetime
import dotenv
import pymongo
mongo_database_name = 'db_analytics'
mongo_collection_name = 'analytics'
try:
db_client = pymongo.MongoClient(f"mongodb://127.0.0.1:27020/db_analytics")
db = db_client[mongo_database_name]
collection = db[mongo_collection_name]
db = db.database
print("MongoDB Connection successfully")
except:
print("Failed MongoDB connection")
analysis_item1 = {
"topic":"Data Analytics",
"rank":2,
"Lat": 'Latitude',
"Long": 'Longitude',
"Province/State":"Germany"
}
analysis_item2 = {
"topic":"Data Analytics",
"rank":5,
"Lat": 'Latitude',
"Long": 'Longitude',
"Province/State":"Africa"
}
a_test_rec1 = collection.insert_one(analysis_item1)
a_test_rec2 = collection.insert_one(analysis_item2)
cursor = collection.find()
for record in cursor:
print(record)
錯誤
ServerSelectionTimeoutError: 127.0.0.1:27020: [WinError 10061] No connection could be made because the target machine actively refused it, Timeout: 30s, Topology Description: <TopologyDescription id: 607bade837307b2e12ed0f7e, topology_type: Single, servers: [<ServerDescription ('127.0.0.1', 27020) server_type: Unknown, rtt: None, error=AutoReconnect('127.0.0.1:27020: [WinError 10061] No connection could be made because the target machine actively refused it')>]>
在您運行初始查詢(即查找/插入等)之前,Pymongo 不會建立“實際”數據庫連接
所以你可以有一個不正確的連接字符串,它不會在創建 MongoClient object 時引發錯誤。 您可以將任何您喜歡的內容放在連接字符串中,它不會引發錯誤(試試看!)
db_client = pymongo.MongoClient("whatever you like")
print('Connected OK!')
在您的情況下,正如評論者指出的那樣,您的指南針連接在端口27017
上,而您的 pymongo 連接在端口27020
上。 您需要將該行更正為:
db_client = pymongo.MongoClient(f"mongodb://127.0.0.1:27017/db_analytics")
或者,假設 27017 是默認端口,只需:
db_client = pymongo.MongoClient(f"mongodb://127.0.0.1/db_analytics")
從 3.0 版開始,MongoClient 構造函數在連接到一個或多個服務器時不再阻塞,如果它們不可用,它不再引發 ConnectionFailure,如果用戶的憑據錯誤,它也不會引發 ConfigurationError。 相反,構造函數立即返回並在后台線程上啟動連接過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.