0

我有一个巨大的烧瓶应用程序,我使用PyMongo来自flask_pymongoMongoDB 操作的类。我的问题是在开发环境中。

MONGO_URI我有一个config.py这样的:

MONGO_URI = "mongodb+srv://username:password@cluster-name.pihvl.gcp.mongodb.net/db_name?retryWrites=true&w=majority"

我的应用程序中的用法如下所示:

# This is how I have initialized it in '__init__.py'
from flask_pymongo import PyMongo
mongo = PyMongo(app)

# This is how I access collections in the specified DB
document = mongo.db[collection_name].find() # Throws the below error

这一直很好,直到几天前我从头开始重新安装 Windows 和 Python。现在相同的代码会引发以下错误:

pymongo.errors.ServerSelectionTimeoutError: cluster-name-shard-00-01.pihvl.gcp.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

但是使用MongoClient而不是PyMongo工作就好了,像这样:

# Using MongoClient and setting 'ssl_cer_reqs'
from flask_pymongo import MongoClient
import ssl
mongo = MongoClient(app.config['MONGO_URI'], ssl_cert_reqs=ssl.CERT_NONE)

# This works just fine
document = mongo[db_name][collection_name].find()

问题

PyMongo当我重新安装所有内容时发生了什么变化?我不想MongoClient仅仅因为有 100 多个端点而使用它,现在转移是一场噩梦,而且我更喜欢PyMongo因为我不必db_name在每个查询中指定 ,它从MONGO_URI.

我错过了什么,我该如何使用它PyMongo?有没有办法设置ssl_cert_reqswhile using PyMongo

4

3 回答 3

0

pip 安装证书

import pymongo
import certifi

myclient = pymongo.MongoClient(CONNECTION_STRING, tlsCAFile=certifi.where())
...
于 2021-11-11T15:55:02.033 回答
0

证书链中的某些内容将发生变化。pymongo 有关于如何解决这个问题的具体文档:

https://pymongo.readthedocs.io/en/stable/examples/tls.html#troubleshooting-tls-errors

于 2021-08-20T20:35:29.590 回答
0

重要提示:仅当您在开发环境中遇到此问题时才执行此操作

我所要做的就是添加&ssl=true&ssl_cert_reqs=CERT_NONE到我MONGO_URI的我的,Development Configuration所以现在我uri的将从:

mongodb+srv://username:password@cluster-name.pihvl.gcp.mongodb.net/db_name?retryWrites=true&w=majority

至:

mongodb+srv://username:password@cluster-name.pihvl.gcp.mongodb.net/db_name?retryWrites=true&w=majority&ssl=true&ssl_cert_reqs=CERT_NONE

于 2021-08-23T22:35:23.140 回答