【问题标题】:pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] when trying to do basic MongoDB querypymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] 尝试执行基本 MongoDB 查询时
【发布时间】:2020-03-28 16:57:29
【问题描述】:

我目前正在尝试使用 MongoDB Atlas(所以它是一个云服务器,我认为对这个错误有很大影响)、mongoengine 和 pymongo(所有最新版本为这篇文章的)。每当我在创建用户表单上提交用户名和密码并尝试通过查询数据库来验证用户名不存在时,我都会收到以下错误消息:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it

这是完整的回溯:

    File "C:\Programming\Python\Lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Programming\Python\Lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  ...
    rv = self.dispatch_request()
  File "C:\Programming\Python\Lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Programming\Khimbus\src\client\views\user_views.py", line 27, in create_user
    account_exists = find_user_by_username(username)
  File "C:\Programming\Khimbus\src\services\user_service.py", line 20, in find_all_users
    users = User.objects()
  File "C:\Programming\Python\Lib\site-packages\mongoengine\queryset\manager.py", line 37, in __get__
    queryset = queryset_class(owner, owner._get_collection())
  File "C:\Programming\Python\Lib\site-packages\mongoengine\document.py", line 207, in _get_collection
    db.client.is_primary:
  File "C:\Programming\Python\Lib\site-packages\pymongo\mongo_client.py", line 1006, in is_primary
    return self._server_property('is_writable')
  File "C:\Programming\Python\Lib\site-packages\pymongo\mongo_client.py", line 830, in _server_property
    server = self._topology.select_server(
  File "C:\Programming\Python\Lib\site-packages\pymongo\topology.py", line 229, in select_server
    return random.choice(self.select_servers(selector,
  File "C:\Programming\Python\Lib\site-packages\pymongo\topology.py", line 188, in select_servers
    server_descriptions = self._select_servers_loop(
  File "C:\Programming\Python\Lib\site-packages\pymongo\topology.py", line 204, in _select_servers_loop

REST 端点:

    @user_views.route('/create-user', methods=['GET', 'POST'])
    def create_user():
    if request.method == 'POST':
        print('Creating user...')
        username = request.form['username']
        password = request.form['password']

        account_exists = find_user_by_username(username)
        if account_exists:
            print(f'Error: Account with {username} already exists.')
            return render_template('error_page.html')

        hashpass = generate_password_hash(password)
        user_state.active_account = create_user(username, hashpass)
        print(user_state.active_account.username)
        session['username'] = user_state.active_account.username
        resp = jsonify('Created new account!')
        resp.status_code = 200
        return resp

    return render_template('create_user.html')

查找用户方法:

def find_user_by_username(username: str) -> User:
    print('Finding user...')
    user = User.objects(username=username)
    print('Found user' + user)
    return user

我不确定这里发生了什么,其他相关问题涉及不同的错误代码,或者太过时而无法帮助我使用 MongoDB Atlas。我将不胜感激任何和所有的信息!

更新:已解决

当我安装 MongoDB 时,我没有将它安装为 Windows 服务。我重新安装了它,现在用户创建工作正常。

【问题讨论】:

    标签: mongodb flask pymongo mongoengine mongodb-atlas


    【解决方案1】:

    来自pythonexamples! 我们已经看到了可能导致此错误的原因。交叉检查以下事项以建立与 MongoDB 实例的连接。

    确保您的 MongoDB 实例正在运行。转到进程并检查 mongod.exe 是否正在运行。

    Windows:签入任务管理器 Ubuntu:运行命令“ps -aef”并查找 mongod 进程 检查您提供的 URL 是否正确。检查运行 Mongo Daemon 的 IP 地址和 PORT 的正确性。

    在 Windows 上安装 MongoDB: 查看: 来自pythonexamples

    【讨论】:

      【解决方案2】:

      检查 mongodb 是否正在运行

      1. 请在本地机器上执行netstat -tlnp
      2. 确保结果中存在端口27017

      在本地机器上安装 mongodb

      请检查以下内容: mongodb installation

      启动mongodb

      systemctl start mongod

      【讨论】:

      • 列表中确实缺少 27017 端口,但是 http://127.0.0.1:5000/ 在列表中,这就是 Flask 运行的本地主机地址 (i.gyazo.com/5737728781ffeac5f757fe9484894f68.png)。所以我不确定它为什么首先尝试连接到 localhost:27017 ......
      • 我还应该提到我已经使用该链接安装了 mongodb 并进行了默认安装并为 mongodb 添加了适当的 PATH 变量。但由于某种原因,运行 systemctl start mongod 没有任何作用,甚至无法识别 systemctl
      • 您的代码中的函数find_user_by_username 要求您连接mongodb
      • 如果你使用window,你应该看一下mongodb手册heresystemctl仅适用于linux系统
      • 哇,好电话。我没有将 MongoDB 安装为 Windows 服务。我安装了它并启动并运行。现在我只需要弄清楚为什么我创建的用户实际上没有保存到数据库中......
      【解决方案3】:

      您提到您正在使用 atlas,但错误是连接到 localhost。需要在 MongoClient 对象中配置 atlas 连接字符串的地方。

      【讨论】:

      • 我在我的 app.py 中这样做:app.config["MONGO_URI"] = "mongodb+srv://" + username + ":" + pwd + "@khimbus-fphpr.gcp.mongodb.net/test?retryWrites=true&w=majority" 这是为我提供的服务器连接字符串图集,用户名和密码替换为显而易见的。
      • 好吧,由于某种原因,这些设置没有被拾取。您提到的设置是指烧瓶,但错误来自 mongoengine。你确定 mongoengire 有正确的配置吗?
      猜你喜欢
      • 2021-09-16
      • 2019-10-06
      • 2020-07-09
      • 2019-06-07
      • 2021-04-10
      • 2020-10-18
      • 2018-03-05
      • 2014-12-22
      • 1970-01-01
      相关资源
      最近更新 更多