2017-09-15 62 views
0

我必須做一個爬蟲(我選擇python)來填充Symfony項目中的數據庫創建(使用原則)。 履帶已完成,但是當我嘗試填充數據庫時,它不起作用...連接到python的Mongo數據庫

因此,我創建一個新的表測試在我的分貝(mtdbdd),只有一個自動增量ID和標題。我試圖填補這個代碼:

from pymongo import MongoClient 

MONGO_URI = 'mongodb://root:[email protected]:8889' 

client = MongoClient(connect=False) 
client = MongoClient(MONGO_URI) 
db = client.mtdbdd 
coll = db.test 

try: 
    result = coll.insert_one({"title": "test"}) 
except coll.errors.OperationFailure as e: 
    print e.code 
    print e.details 

但我有錯誤:

pymongo.errors.ServerSelectionTimeoutError: Got opcode 3945 but expected 1 

有些人能幫助我嗎?多謝你們 !

+0

你是怎麼開始的MongoDB? Mongodb的默認端口是27017通常,所以不知道爲什麼你使用8889 – MrE

+0

更改MongoClient的這兩行,到'MongoClient(MONGO_URI,connect = False)' – eLRuLL

+0

@MrE我使用這個端口導致我的數據庫在這個端口上, nt我? (我在Mac上使用Mamp) –

回答

0

現在,我運行此腳本:

import pymongo 
from pymongo import MongoClient 

MONGO_URI = "mongodb://root:[email protected]:8889/mtdbdd" 

client = MongoClient(MONGO_URI) 
db = client.mtdbdd 
collection = db.land 
post = {"title": "test"} 

try: 
    post_id = collection.insert_one(post) 
except collection.errors.OperationFailure as e: 
    print e.code 
    print e.details 

但錯誤來自行:

post_id = collection.insert_one(post) 
+0

你確定你的mongodb啓用了auth(安全)嗎? 如果手動未啓用auth(默認爲:disabled),則應該將mongouri編輯爲「mongodb:// localhost:8889」或「mongodb://127.0.0.1:8889」 您的代碼在'post_id = collection.insert_one(post)''coz pymongo無法連接到mongodb。另外,請仔細檢查mongod實例是否正在運行。 請問您可以發佈您的'mongod.conf'文件:) –

+0

另一方面,如果啓用了身份驗證,則SSL也可能啓用。在'MongoClient()'的構造中'ssl = True'和'ssl_cert_reqs = ssl.CERT_NONE'可能會有所幫助。 'ssl_cert_reqs = ssl.CERT_NONE'當然只有證書是自簽名的,不應該被檢查。據我記得,當我沒有在客戶端啓用SSL(對於我的SSL安全服務器)時,我從'pymongo'獲得了超時錯誤。 – Aufziehvogel