Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pymongo将数据插入mongoDB_Python_Mongodb_Pycharm_Pymongo_Atlas - Fatal编程技术网

Python 使用pymongo将数据插入mongoDB

Python 使用pymongo将数据插入mongoDB,python,mongodb,pycharm,pymongo,atlas,Python,Mongodb,Pycharm,Pymongo,Atlas,我似乎无法将数据上传到atlas上托管的mongo db中。我已经复制了张贴在这里的确切步骤 我收到一个超时错误。每一行都工作,直到我到达插入行(x=…)。我正在使用pycharm和python 3.7。但是,我也在jupyter上尝试了这一点,并收到了相同的错误: pymongo.errors.ServerSelectionTimeoutError: jordandb-shard-00-00-ykcna.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_F

我似乎无法将数据上传到atlas上托管的mongo db中。我已经复制了张贴在这里的确切步骤

我收到一个超时错误。每一行都工作,直到我到达插入行(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的步骤
这有几个原因。
最明显的一点是您缺少证书链

您可以通过以下方式获取链信息:

openssl s_client -showcerts -servername jordandb-shard-00-00-ykcna.mongodb.net -connect jordandb-shard-00-00-ykcna.mongodb.net:27017 </dev/null
这表明证书来自DigiCert。
证书的有效期为
7/02-19 00:00 GMT
11/2-19 12:00 GMT

在任何终端上运行
date
,都会很有希望地告诉您您处于这两个日期之间

在任何其他情况下,我认为这是由于自签名证书。
在这种情况下,您需要做以下两件事之一:

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

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

您可以使用pymongo默认功能

connObj = MongoClient(MONGO_HOST, MONGO_PORT)
connObj[MONGO_DB].authenticate(MONGO_UNAME, MONGO_PASSWD)

那个连接字符串看起来有点奇怪。堆栈跟踪也很奇怪。你确定主机名应该用端口号多次用逗号分隔吗?我添加了获取连接字符串+图片的步骤。问题是证书是自签名的。或者您的计算机找不到此证书的CA。手动提供它可能会有所帮助:
MongoClient(…,ssl\u ca\u certs='/path/to/ca.pem')
或者在最坏的情况下,执行
ssl\u cert\u reqs=ssl.cert\u NONE
。有关更多信息,请参阅。您的计算机时间可能错误,您没有安装证书链(gentoo、arch linux等)。也在文档中:)您可以通过在任何linux计算机上发出以下命令来验证证书:
openssl s_client-showcerts-servername jordandb-shard-00-0-ykcna.mongodb.net-connect jordandb-shard-00-00-ykcna.mongodb.net:27017 OMG Torxed,我从mac切换到我的桌面,它工作了!这是时间问题。非常感谢。请在回答区张贴,这样我可以给你学分
MongoClient(..., ssl_ca_certs='/path/to/ca.pem')
MongoClient(..., ssl_cert_reqs=ssl.CERT_NONE)
connObj = MongoClient(MONGO_HOST, MONGO_PORT)
connObj[MONGO_DB].authenticate(MONGO_UNAME, MONGO_PASSWD)