Python pymongo 3.2:连接失败不工作
当代码无法连接到MongoD实例时,我正在竭尽全力让pymongo出错。看起来无论我做什么,“pymongo.errors.ConnectionFailure”都不起作用。我在localhost和远程mongoD实例上尝试过这一点。当我从同一个系统使用mongoclient shell('mongo--host xx.xx.xx.xx')时,我得到了正确的“连接被拒绝”。其他异常正在工作,但不是“ConnectionFailure”。请注意,当我在mongod实例主机上运行tshark sniffer时,我在关闭端口上看到正确的TCP RST,用于拒绝连接。Mongod未侦听,但pymongo ConnectionFailure无法捕获失败的连接 python版本:2.7.10 pymongo版本:3.2 我可能会遗漏什么,或者需要采取哪些步骤进行故障排除?在下面的示例中,mongod未在本地主机上运行。我还在远程主机上停止它。在这两种情况下,都不会捕获异常错误,pymongo代码似乎认为它已连接 代码:Python pymongo 3.2:连接失败不工作,python,pymongo,Python,Pymongo,当代码无法连接到MongoD实例时,我正在竭尽全力让pymongo出错。看起来无论我做什么,“pymongo.errors.ConnectionFailure”都不起作用。我在localhost和远程mongoD实例上尝试过这一点。当我从同一个系统使用mongoclient shell('mongo--host xx.xx.xx.xx')时,我得到了正确的“连接被拒绝”。其他异常正在工作,但不是“ConnectionFailure”。请注意,当我在mongod实例主机上运行tshark snif
第一次尝试:语法错误 代码中有语法错误。更改:
pymongo.MongoClient('localhost':27017)
进入:
或者像这样:
pymongo.MongoClient(host='localhost', port=27017)
你的报价单放错地方了
使用Python3.4.3和pymongo 2.9的工作示例代码段
import pymongo
try:
pymongo.MongoClient('localhost:27017')
except pymongo.errors.ConnectionFailure as e:
print(e)
阅读后 我认为这种行为符合要求,因为: 在Pymongo3中,MongoClient构造函数不再在 连接到一个或多个服务器,并且不再引发
ConnectionFailure
如果它们不可用,也不ConfigurationError
如果
用户的凭据错误。相反,构造函数返回
立即启动并在后台线程上启动连接进程。
添加了connect选项以控制这些线程是否
立即启动,或在首次使用客户端时启动
如《迁移指南》所示,类似这样的操作应该可以:
这似乎只有在我再添加两行以获取数据库和身份验证时才起作用。我不知道为什么。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]连接被拒绝'def dbConnect():
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())
尝试:
conn=pymongo.MongoClient()
尝试:
连接服务器信息()
返回“连接成功”
除操作故障外,如e:
返回e
例外情况除外,如e:
返回e
打印(dbConnect())
由于MongoClient不会返回在康涅狄格州有帮助的有价值的响应,这将很好地工作。在使用
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())
def initiateDbConnection():
尝试:
dbConnection=pymongo.MongoClient()
尝试:
dbConnection.server_info()
返回“已建立连接”
除操作故障作为错误外:
返回错误
除异常作为错误外:
返回错误
打印(initiateDbConnection())
您是否能够使用mongo
shell连接到MongoDB?否,响应被拒绝。因此,首先您应该确保MongoDB正常运行…mongod不应该运行。pymongo代码未捕获ConnectionFailure的异常。我不确定我还能检查什么,因为MongoD不应该运行。我可以让MongoShell和pymongo正常连接。我认为你没有理解我的问题。当它不运行时,代码无法检测到连接故障。我之所以需要这样做,是因为对失败连接进行了详细而细致的检测。该死,这并不能解决问题。但愿如此。唯一的区别是您运行的是Python3.4.3,而我运行的是2.7。你是说你得到了ConnectionFailure响应,还是它确实连接了?我可以在端口27017上连接到正在运行的数据库,并在尝试在端口12345上连接时处理ConnectionFailure。好的,在这里继续,但我仍然不明白。这个代码确实有效。似乎ConnectionFailure只在我将句柄添加到DB并尝试进行身份验证时对我有效。这是有效的:@Albert感谢您的测试。您正在运行什么版本的pymongo和python?我猜你已经做了一次理智的检查,确认我的代码是正确的,一定是其他原因。我的错,你在上面说过。我以为你是另一个用户。我唯一能想到的是尝试使用Python 3.4而不是2.7。如果你看到我的另一个答案,我让它工作,做连接失败,但只有当我得到数据库,并试图验证。
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)
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())
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())