gpt4 book ai didi

python - 使用 pymongo 向 mongoDB 中插入数据

转载 作者:可可西里 更新时间:2023-11-01 10:37:09 25 4
gpt4 key购买 nike

我似乎无法将数据上传到我在 atlas 上托管的 mongo 数据库。我已经复制了此处发布的确切步骤。 https://www.w3schools.com/python/python_mongodb_insert.asp

import pymongo
import requests

url= "mongodb://jordan:*********@jordandb-shard-00-00-ykcna.mongodb.net:27017,jordandb-shard-00-01-ykcna.mongodb.net:27017,jordandb-shard-00-02-ykcna.mongodb.net:27017/test?ssl=true&replicaSet=JordanDB-shard-0&authSource=admin&retryWrites=true"

client = pymongo.MongoClient(url)
mydb = client.test
mycol = mydb["customers"]
mydict = {"name":"John", "adress":"Highway 37"}
x = mycol.insert_one(mydict)

print(client.list_database_names())

我收到超时错误。每行都有效,直到我到达插入行 (x = ....)。我正在使用 pycharm 和 python 3.7。但是我也在 jupyter 上尝试过这个并且收到了同样的错误:

pymongo.errors.ServerSelectionTimeoutError: jordandb-shard-00-00-ykcna.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056),jordandb-shard-00-01-ykcna.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056),jordandb-shard-00-02-ykcna.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

以下是我获取 url 所遵循的步骤 enter image description here enter image description here

最佳答案

这有几个原因。 最明显的一个是您缺少证书链。

您可以通过发行获取链信息:

openssl s_client -showcerts -servername jordandb-shard-00-00-ykcna.mongodb.net -connect jordandb-shard-00-00-ykcna.mongodb.net:27017 </dev/null

这会告诉您它来自 DigiCert。因此,要么您在本地证书存储中缺少该证书链(某些发行版可能需要您安装根 ca 信任)。但是,如果您确实安装了 root ca。是时候检查证书的验证时间了。
如果您添加 | openssl x509 -noout -dates 您将获得此证书的有效日期:

openssl s_client -showcerts -servername jordandb-shard-00-00-ykcna.mongodb.net -connect jordandb-shard-00-00-ykcna.mongodb.net:27017 </dev/null  | openssl x509 -noout -dates

告诉您证书来自 DigiCert。
证书有效期为 7/02-19 00:00 GMT11/2-19 12:00 GMT
在任何终端中运行 date 应该会告诉您您处于这两个日期之间。

在任何其他情况下,我会说这是由于自签名证书。
在这种情况下,您需要执行以下两项操作之一:

MongoClient(..., ssl_ca_certs='/path/to/ca.pem')
MongoClient(..., ssl_cert_reqs=ssl.CERT_NONE)

要么提供您的自定义 CA,要么告诉 Mongo 忽略证书验证(后者是最糟糕的选择。即使您说“我不会忘记稍后修复它”,呵呵) .

关于python - 使用 pymongo 向 mongoDB 中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com