当我的代码无法连接到MongoD实例时,我将我的头发拉出来试图让pymongo出错。似乎无论我做什么,' pymongo.errors.ConnectionFailure'不管用。我在localhost和一个远程mongoD实例上试过这个。当我使用来自同一系统的mongoclient shell(' mongo --host xx.xx.xx.xx')时,我得到了正确的拒绝连接#39;其他例外情况正在发挥作用,但不是“ConnectionFailure”。'请注意,当我在mongod实例主机上运行tshark嗅探器时,我在关闭的端口上看到正确的TCP RST以拒绝连接。 Mongod没有收听,但是pymongo ConnectionFailure无法捕获失败的连接。
python版本:2.7.10 pymongo版本:3.2
我可能缺少什么,或者排除故障的步骤?在下面的示例中,mongod未在localhost上运行。我也在远程主机上停止它。在这两个实例中,都没有捕获异常错误,并且pymongo代码似乎认为它已连接。
代码:
import pymongo
try:
pymongo.MongoClient('localhost:27017')
except pymongo.errors.ConnectionFailure, e:
print "Could not connect: %s" % e
答案 0 :(得分:3)
def dbConnect():
try:
conn = pymongo.MongoClient(<connection URL>)
try:
conn.server_info()
return "Connection Successfull"
except OperationFailure as e:
return e
except Exception as e:
return e
print (dbConnect())
由于MongoClient不会返回有价值的响应来帮助连接状态,因此效果很好。
答案 1 :(得分:2)
在使用pymongo.MongoClient()
时,我也遇到了这个问题。
请尝试以下代码,这可能会对您有所帮助:
def initiateDbConnection():
try:
dbConnection= pymongo.MongoClient(<connection URL>)
try:
dbConnection.server_info()
return "Connection Established"
except OperationFailure as err:
return err
except Exception as err:
return err
print (initiateDbConnection())
答案 2 :(得分:0)
首次尝试:语法错误
您的代码中出现语法错误。变化:
pymongo.MongoClient('localhost':27017)
成:
pymongo.MongoClient('localhost:27017')
或类似的东西:
pymongo.MongoClient(host='localhost', port=27017)
你在错误的地方有单引号。
使用Python 3.4.3和pymongo 2.9
运行示例代码段import pymongo
try:
pymongo.MongoClient('localhost:27017')
except pymongo.errors.ConnectionFailure as e:
print(e)
后
我认为这种行为符合要求,因为guide告诉:
在PyMongo 3中,MongoClient构造函数不再阻塞 连接到服务器或服务器,它不再提高
ConnectionFailure
如果不可用,ConfigurationError
如果不可用 用户的凭据错误。相反,构造函数返回 立即启动后台线程上的连接过程。 添加connect选项以控制这些线程是否为 立即开始,或首次使用客户端时。
如迁移指南所示,这样的事情应该有效:
from pymongo.errors import ConnectionFailure client = MongoClient(connect=False) try: result = client.admin.command("ismaster") except ConnectionFailure: print("Server not available")
答案 3 :(得分:0)
这似乎仅在我添加两行以获取数据库并进行身份验证时才有效。我不知道为什么。 ConnectionFailure不应该仅在您尝试连接时捕获错误吗?
try:
dbconn = pymongo.MongoClient(host, port)
db = dbconn[dbname]
success = db.authenticate(user, password)
except pymongo.errors.ConnectionFailure as msg:
print "Failed connection: %s" % str(msg)
当我在未运行mongod的主机上使用嗅探器观看时,它尝试连接20-30秒,然后pymongo主机打印:
'连接失败:host.db.com:27017:[Errno 61]拒绝连接'