2017-09-15 71 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