python 连接 mongo 数据库连接超时

问题描述

1. 使用 mongo 数据库的replication模式建立了复制集集群,发现在使用程序连接数据库时报了一个 timeout 的错误,uri 为多个主机 ip。
2. 将 uri 写成其中的任意一个 ip,发现可以正常连接到主机进行查询。

测试程序如下

import pymongo,time
username="test"
password="test"
authdb="admin"
connection=pymongo.mongo_client.MongoClient(host="192.168.10.9:27017,192.168.10.11:27017",connect=False,username=username,password=password)
dbnames=connection.server_info()
connection.close()
print(dbnames)
复制代码

以上测试程序报错如下

/usr/local/bin/python3.7 /Users/qixiao/IdeaProjects/mongod_rep_set/repset.py
Traceback (most recent call last):
  File "/Users/qixiao/IdeaProjects/mongod_rep_set/repset.py", line 10, in <module>
    dbnames=connection.server_info()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1620, in server_info
    session=session)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/database.py", line 611, in command
    read_preference) as (sock_info, slave_ok):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py", line 112, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1101, in _socket_for_reads
    server = topology.select_server(read_preference)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/topology.py", line 224, in select_server
    address))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/topology.py", line 183, in select_servers
    selector, server_timeout, address)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: 192.168.10.9:27017: timed out,192.168.10.11:27017: timed out

Process finished with exit code 1
复制代码

下面单独连接一台数据库程序如下

import pymongo
username="test"
password="test"
authdb="admin"
connection=pymongo.mongo_client.MongoClient(host="192.168.10.9:27017,connect=False,username=username,password=password)
dbnames=connection.server_info()
connection.close()
print(dbnames)
复制代码
/usr/local/bin/python3.7 /Users/qixiao/IdeaProjects/mongod_rep_set/repset.py
{'version': '3.6.5', 'gitVersion': 'a20ecd3e3a174162052ff99913bc2ca9a839d618', 'modules': [], 'allocator': 'system', 'javascriptEngine': 'mozjs', 'sysInfo': 'deprecated', 'versionArray': [3, 6, 5, 0], 'openssl': {'running': 'OpenSSL 1.1.0h  27 Mar 2018', 'compiled': 'OpenSSL 1.1.0h  27 Mar 2018'}, 'buildEnvironment': {'distmod': '', 'distarch': 'x86_64', 'cc': 'gcc: Apple LLVM version 8.1.0 (clang-802.0.42)', 'ccflags': '-mmacosx-version-min=10.10 -fno-omit-frame-pointer -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -Werror -O2 -Wno-unused-local-typedefs -Wno-unused-function -Wno-unused-private-field -Wno-deprecated-declarations -Wno-tautological-constant-out-of-range-compare -Wno-unused-const-variable -Wno-missing-braces -Wno-inconsistent-missing-override -Wno-potentially-evaluated-expression -Wno-exceptions -fstack-protector-strong -fno-builtin-memcmp', 'cxx': 'g++: Apple LLVM version 8.1.0 (clang-802.0.42)', 'cxxflags': '-Woverloaded-virtual -Werror=unused-result -Wpessimizing-move -Wredundant-move -Wno-undefined-var-template -stdlib=libc++ -std=c++14', 'linkflags': '-mmacosx-version-min=10.10 -Wl,-bind_at_load -Wl,-fatal_warnings -fstack-protector-strong -stdlib=libc++', 'target_arch': 'x86_64', 'target_os': 'macOS'}, 'bits': 64, 'debug': False, 'maxBsonObjectSize': 16777216, 'storageEngines': ['devnull', 'ephemeralForTest', 'mmapv1', 'wiredTiger'], 'ok': 1.0}

Process finished with exit code 0

复制代码

总结: 看到某一网站上说增加一个传参 conn=False,来进行等待创建进程,待进程创建完毕后执行连接库操作,我将程序的 True 改成 False 发现依然报超时错误,来掘金发觉我的解决办法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作Mongo数据库需要先安装pymongo库,在安装前已经安装了MongoDB数据库。 以下是使用Python操作Mongo数据库的基本方法: 1. 连接Mongo数据库: ```python import pymongo #连接Mongo数据库 client = pymongo.MongoClient(host="localhost", port=27017) ``` 2. 创建数据库: ```python #创建数据库 db = client["mydatabase"] ``` 3. 创建数据表(集合): ```python #创建数据表 collection = db["customers"] ``` 4. 插入记录: ```python #插入单条记录 mydict = {"name": "John", "address": "Highway 37"} x = collection.insert_one(mydict) #插入多条记录 mylist = [ {"name": "Amy", "address": "Apple st 652"}, {"name": "Hannah", "address": "Mountain 21"}, {"name": "Michael", "address": "Valley 345"}, {"name": "Sandy", "address": "Ocean blvd 2"}, {"name": "Betty", "address": "Green Grass 1"}, {"name": "Richard", "address": "Sky st 331"} ] x = collection.insert_many(mylist) ``` 5. 搜索记录: ```python #搜索单条记录 x = collection.find_one() #搜索所有记录 for x in collection.find(): print(x) #指定条件搜索 myquery = {"address": "Park Lane 38"} mydoc = collection.find(myquery) #模糊搜索 myquery = {"address": {"$regex": "^S"}} mydoc = collection.find(myquery) ``` 6. 删除记录: ```python #删除单条记录 myquery = {"address": "Mountain 21"} collection.delete_one(myquery) #删除多条记录 myquery = {"address": {"$regex": "^S"}} x = collection.delete_many(myquery) #删除数据表 collection.drop() ``` 以上就是使用Python操作Mongo数据库的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值