使用过程中出现mongodb连接到网络数据中心的时候,出现ssl错误,需要进行相关配置,利用pymongo进行数据连接。
错误代码
1 | pymongo.errors.ServerSelectionTimeoutError: cluster0-shard-00-02.kwrin.azure.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056) |
原因分析
- 官方运用了mongodb4.4的版本,进行了升级,需要对pymongo进行升级。
- 需要把证书放置到本地
补修过程
- 卸载低版本
pip uninstall pymongo
- 安装高版本
pip install pymongo[srv]
安装证书ssl,stl插件
pip install certifi
- 此处需要把证书下载并添加到本地
在python中运行
1
2import certifi
certifi.where()找到相关路径文件
site-packages\\certifi\\cacert.pem
,使用文本编辑器件打开- 打开网站
https://cloud.mongodb.com/v2/5d0c2c79d5ec134e4b3e18b6#security/network/accessList
- 点开浏览器地址前面的小锁
- 点击
证书
-详细信息
-复制到文件
-下一页
-选择Base64编码
-下一页
-存储为.cer
文件 - 使用记事本工具打开
.cer
文件 - 复制内容
---Begin Certificate--- *** ---End Certificate---
- 然后添加到刚才打开的
certifi
文件site-packages\\certifi\\cacert.pem
最后 - 保存完毕
- 修改数据库连接字符串
- 引入证书支持文件
- 在字符连接中添加路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import pymongo
import certifi
from urllib.parse import quote_plus
user = quote_plus("dbuser_webjoy")
password = quote_plus("123456a!")
host = 'cluster0.kwrin.azure.mongodb.net'
client = pymongo.MongoClient(
"mongodb+srv://" +
user +
":" +
password +
'@' +
host +
'/video?retryWrites=true&w=majority',
tlsCAFile=certifi.where())
db = client["d_dyart"]
rexx = db.collection.find()
小插曲
- 解决sublime数字键盘回车键不能使用的问题
- 打开sublime菜单
首选项
-快捷键设置
找到
enter
,然后再后面添加1
{ "keys": ["keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
完美解决
饮水思源
- [https://stackoverflow.com/questions/68123923/pymongo-ssl-certificate-verify-failed-certificate-verify-failed-unable-to-ge]
- [https://stackoverflow.com/questions/51925384/unable-to-get-local-issuer-certificate-when-using-requests-in-python]
- [https://stackoverflow.com/questions/51925384/unable-to-get-local-issuer-certificate-when-using-requests-in-python]
- [https://sublimetext.userecho.com/en/communities/1/topics/1989-numeric-keypads-enter-key-does-not-work]