Вставка данных в mongoDB с помощью pymongo - PullRequest
0 голосов
/ 25 февраля 2019

Кажется, я не могу загрузить данные в мою базу данных 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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать функцию по умолчанию pymongo

connObj = MongoClient(MONGO_HOST, MONGO_PORT)
connObj[MONGO_DB].authenticate(MONGO_UNAME, MONGO_PASSWD)
0 голосов
/ 25 февраля 2019

Для этого есть несколько причин.
Наиболее очевидной из них может быть отсутствие цепочки сертификатов.

Информацию о цепочке можно получить из выдачи:

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

Что скажет вам, что это от DigiCert.Так что либо вы пропустили цепочку сертификатов в вашем локальном хранилище сертификатов (в некоторых дистрибутивах вам может понадобиться установить доверие root root) .Но если у вас установлен 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 GMT до 11/2-19 12:00 GMT.
Запуск date в любом терминале должен, надеюсь, сказать вам, что вы находитесь между этими двумя датами.

В любом другом случае, Я бы сказал, что это из-за самозаверяющего сертификата.
В этом случае вам нужно будет сделать одну из двух вещей:

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

Чтобы предоставить свой собственный ЦС или сказать Mongo, чтобы он игнорировал сертификатпроверка (последний вариант - наихудший из возможных вариантов. Даже если вы скажете: «Я не забуду исправить это позже», хех) .

...