【问题标题】:flaks and pymongo failing to connect to my database returning pymongo.errors.ServerSelectionTimeoutErrorflask 和 mongo 无法连接到我的数据库返回 pymongo.errors.ServerSelectionTimeoutError
【发布时间】:2020-04-23 03:43:42
【问题描述】:

每次我尝试使用邮递员测试我的注册 Api 时,我都会收到内部服务器错误作为返回的错误消息,而在我的终端上我会收到此错误

 [2020-01-05 07:14:52,933] ERROR in app: Exception on /register [POST]
web_1  | Traceback (most recent call last):
web_1  |   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1949, in full_dispatch_request
web_1  |     rv = self.dispatch_request()
web_1  |   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1935, in dispatch_request
web_1  |     return self.view_functions[rule.endpoint](**req.view_args)
web_1  |   File "/usr/local/lib/python3.8/site-packages/flask_restful/__init__.py", line 458, in wrapper
web_1  |     resp = resource(*args, **kwargs)
web_1  |   File "/usr/local/lib/python3.8/site-packages/flask/views.py", line 89, in view
web_1  |     return self.dispatch_request(*args, **kwargs)
web_1  |   File "/usr/local/lib/python3.8/site-packages/flask_restful/__init__.py", line 573, in dispatch_request
web_1  |     resp = meth(*args, **kwargs)
web_1  |   File "app.py", line 99, in post
web_1  |     if UserExist(username):
web_1  |   File "app.py", line 20, in UserExist
web_1  |     count =  db.users.count_documents({"Username": username})
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/collection.py", line 1720, in count_documents
web_1  |     return self.__database.client._retryable_read(
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1453, in _retryable_read
web_1  |     server = self._select_server(
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1253, in _select_server
web_1  |     server = topology.select_server(server_selector)
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 233, in select_server
web_1  |     return random.choice(self.select_servers(selector,
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 192, in select_servers
web_1  |     server_descriptions = self._select_servers_loop(
web_1  |   File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 208, in _select_servers_loop
web_1  |     raise ServerSelectionTimeoutError(
web_1  | pymongo.errors.ServerSelectionTimeoutError: :27017: [Errno -2] Name or service not known
web_1  | 172.20.0.1 - - [05/Jan/2020 07:14:52] "POST /register HTTP/1.1" 500 -

以下是我的注册和用户检查代码

class Register(Resource):
    def post(self):
        postedData = request.get_json()
        username = postedData["username"]
        password = postedData["password"]

        if UserExist(username):
            retJson = {
                "status code": 301,
                "message": "Invalid username"
            }
            return jsonify(retJson)
        hashed_pw = bcrypt.hashpw(password.encode('utf8'), bcrypt.gensalt())
        users.inser({
            "Username": username,
            "Password": hashed_pw
        })
        retJson = {
            "status code": 200,
            "message": "successfully registered"
        }

        return jsonify(retJson)

def UserExist(username):
    count =  db.users.count_documents({"Username": username})
    if count <= 0:
        return False
    else:
        return True

我已经尝试了我能想到的每一个技巧,请知道出了什么问题以及如何解决这个问题,谢谢。

【问题讨论】:

  • 我们需要了解您是如何创建 db 变量以及您传递给 MongoClient 的参数
  • 检查mongodb服务器是否正在运行??
  • @vikas 是的,我的 mongodb 服务器正在运行
  • @Belly 这里是我创建数据库的方式 client = MongoClient("mongodb://:27017") db = client.SimDB users = db["Users"] # for admin admin = db[ “管理员”]
  • 你有没有通过 api.add 为此创建路由??

标签: python-3.x flask postman pymongo flask-restful


【解决方案1】:

您的问题在于 MongoClient 连接;你有:

MongoClient("mongodb://:27017")

我建议它必须是:

MongoClient("mongodb://localhost:27017")

【讨论】:

  • 这不起作用,而是现在的错误是这个 pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection denied
  • 用 localhost 代替运行 mongodb 的服务器名或 IP 地址。确保您可以从运行代码的任何位置连接到该服务器。
  • 仍然有相同的错误连接拒绝标记此函数 def UserExist(username): if users.count_documents({"Username":username})==0: return False else: return True
  • 你能从 shell 连接吗?在你的命令提示符下输入mongo mongodb://&lt;YourMongoServerName&gt;:27017
  • 111 错误可能是防火墙或 IP 绑定。您是否在与 python 程序不同的机器上运行 mongodb?
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 2021-11-02
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多