鍍金池/ 問(wèn)答/Python  數(shù)據(jù)庫(kù)/ python使用pymongo連接本地?cái)?shù)據(jù)庫(kù)提示積極拒絕?

python使用pymongo連接本地?cái)?shù)據(jù)庫(kù)提示積極拒絕?

問(wèn)題如題,具體情況我詳細(xì)描述。
在知乎上提過(guò)相同問(wèn)題

本人自學(xué)python爬蟲時(shí)候接觸到了MongoDB,根據(jù)菜鳥教程給的網(wǎng)址進(jìn)行安裝,目測(cè)還挺正常的,提出了warning但是查了一下大概就是說(shuō)我沒用戶名密碼本地?cái)?shù)據(jù)庫(kù)什么的。如下圖:
安裝結(jié)果

設(shè)置了配置文件mongod.cfg:

systemLog:
   destination: file
   path: H:\data\log\mongo.log
   logAppend: true
storage:
    dbPath: h:\data\db

net:
  bindIp: 127.0.0.1

到這里還沒什么異樣,我接著按照菜鳥教程的步驟輸入在shell里輸入mongo得到反饋:
反饋
這和菜鳥教程的結(jié)果不一致:
不一致結(jié)果

其實(shí)也無(wú)傷大雅,因?yàn)楹竺娴募臃ê筒迦霐?shù)據(jù)都成功了。

但是根據(jù)其他的教程,我在chrome輸入“l(fā)ocalhost:27107”提示我:
訪問(wèn)失敗

接下來(lái)就是回到我現(xiàn)在提出的問(wèn)題了。我看了一些代碼之后寫了一個(gè)很簡(jiǎn)單的代碼來(lái)玩玩,如下:

from pymongo import MongoClient

client = MongoClient('localhost', 27107)

db = client.test

posts = db.posts

post = {
        "name": "shiki", 
        "age": "21"
        }

posts.insert(post)

不論我代碼寫的對(duì)不對(duì),我發(fā)現(xiàn)我在第二行就出現(xiàn)了錯(cuò)誤:
圖片描述

此時(shí)我的windows服務(wù)MongoDB 是在運(yùn)行的,我應(yīng)該也是在運(yùn)作MongoDB(其實(shí)我不大確定有沒開啟,不過(guò)我在CMD里已經(jīng)掛著第一張圖的界面,我就默認(rèn)是打開了

問(wèn)題的描述就到這了。下面是我電腦的一些情況,和做過(guò)的嘗試,說(shuō)出來(lái)好分析。

--------------------------分割線-----------------------------

  1. 網(wǎng)上有說(shuō)法27107可能沒開放什么的,我在防火墻的入站規(guī)則那已經(jīng)設(shè)置打開了。沒用
  2. 在分別對(duì)有掛SSR和沒掛SSR時(shí)候進(jìn)行過(guò)嘗試,也不行。
  3. 找到還有人說(shuō)ip問(wèn)題,我試過(guò)把ip設(shè)置成0.0.0.0也不行(其實(shí)我覺得可能性不大,不過(guò)也試了)
  4. 還有人說(shuō)mongodb沒啟動(dòng)……我也不知道怎么說(shuō)了,我用官方自帶的MongoDB Compass能連上,在shell也能進(jìn)行數(shù)據(jù)操作,這就默認(rèn)是開啟了吧?
  5. 在配置文件了,我也把端口特意寫成了27107也不行
  6. 我的是臺(tái)式電腦,不是用的網(wǎng)線,是用的是wifi接收器,而且家里的tplink是經(jīng)過(guò)小米信號(hào)放大器類似中繼過(guò)吧?我也不太懂,就是房間信號(hào)弱,就用了個(gè)放大器再搜放大器wifi
  7. 嚴(yán)重懷疑是網(wǎng)絡(luò)不知道那個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題。當(dāng)然了也有可能我經(jīng)驗(yàn)不足沒發(fā)現(xiàn)什么。有意思想要解決問(wèn)題的大佬可以提出自己的想法或者跟我要一些詳細(xì)的情況。再三感謝了?。。?!
回答
編輯回答
怣人

有點(diǎn)混亂,我一點(diǎn)點(diǎn)說(shuō):

目測(cè)還挺正常的,提出了warning但是查了一下大概就是說(shuō)我沒用戶名密碼本地?cái)?shù)據(jù)庫(kù)什么的。

沒錯(cuò),這里只是警告,告訴你有一些運(yùn)行風(fēng)險(xiǎn),不符合最佳實(shí)踐,但是不影響你使用。只是上生產(chǎn)環(huán)境之前應(yīng)該考慮解決掉這些問(wèn)題。

配置文件沒有問(wèn)題,你的截圖中已經(jīng)進(jìn)入了mongo shell,可以開始執(zhí)行mongo的CRUD命令了(就跟進(jìn)入了mysql shell一樣)。但是你又在mongo shell里面執(zhí)行mongo,不明白是什么意思。mongo.exe是一個(gè)bash命令,運(yùn)行它之后就是進(jìn)入mongo shell而已,而你已經(jīng)在shell里面了。你是怎么進(jìn)入這個(gè)shell的?不就是執(zhí)行了mongo嗎?

再來(lái)說(shuō)chrome連接localhost:27017,好多人犯這樣的錯(cuò)誤,可能都是來(lái)自于一些教程的誤導(dǎo)。舉個(gè)例子,MySQL默認(rèn)監(jiān)聽localhost:3306,SQLServer默認(rèn)監(jiān)聽localhost:1433,你會(huì)在影響器里面去連接localhost:1433/localhost:3306嗎?連接之后會(huì)有什么效果?同樣會(huì)出現(xiàn)截圖里面的錯(cuò)誤。這樣去連接沒有意義。要連接27017端口應(yīng)該使用mongo shell,也就是mongo.exe:mongo.exe --host localhost:27017

最后說(shuō)Python的問(wèn)題。你前面已經(jīng)通過(guò)shell連接上了MongoDB,所以服務(wù)器運(yùn)行是沒有問(wèn)題的。而Python連接不上,可能原因是localhost這個(gè)域名的解析有問(wèn)題。你可以改用:

MongoClient('127.0.0.1', '27017')

試一下看看是什么結(jié)果。

2017年4月10日 16:34