簡體   English   中英

Mongodb 服務器選擇超時錯誤 目標機器拒絕連接

[英]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")

來源: https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient

從 3.0 版開始,MongoClient 構造函數在連接到一個或多個服務器時不再阻塞,如果它們不可用,它不再引發 ConnectionFailure,如果用戶的憑據錯誤,它也不會引發 ConfigurationError。 相反,構造函數立即返回並在后台線程上啟動連接過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM