我是編程新手,正在構建我的第一個應用程式。我正在構建一個 kivy 應用程式,嘗試使用 mongoDB 作為資料庫。我可以連接到本地主機來查詢和創建檔案。無論我嘗試什么,我都無法讓它連接到地圖集。我也在使用 Pycharm 和 venv。
基本資訊如下:
import pymongo
from pymongo.server_api import ServerApi
import mongoengine as mongo
import ssl
data = 'events'
username = 'admin'
password = 'abc123'
host_name = 'mongodb srv://events.xfmhxnj.mongodb.net'
uri = f'mongodb srv://{username}:{password}@events.xfmhxnj.mongodb.net/'
mongo.connect(db=db,
username=username,
password=password,
host=host_name)
class Obj(mongo.Document):
name = mongo.StringField(required=True)
div = Obj()
div.name = 'test'
div.save()
這給了我這個錯誤:raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-liums0m-shard-00-00.xfmhxnj.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
然后我查找了這個錯誤,發現有人推薦:
mongo.connect(db=db,
username=username,
password=password,
host=host_name,
ssl=True,
ssl_cert_reqs=ssl.CERT_NONE,)
)
錯誤:raise ConnectionFailure(f"Cannot connect to database {alias} :\n{e}") mongoengine.connection.ConnectionFailure: Cannot connect to database default : Unknown option ssl_cert_reqs
我不明白為什么它是一個未知的選擇。pymongo 在示例中列出了它。 https://api.mongodb.com/python/3.3.0/examples/tls.html
我也直接從 Atlas 嘗試過字串:
client = pymongo.MongoClient(f"mongodb srv://{username}:{password}@events.xfmhxnj.mongodb.net/?retryWrites=true&w=majority", server_api=ServerApi('1'))
db = client.test
client.server_info()
錯誤:raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-liums0m-shard-00-01.xfmhxnj.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
或者如果我只是從指南針粘貼 uri 字串
mongo.connect('mongodb srv://admin:[email protected]/test')
錯誤:raise InvalidName("database names cannot contain the character %r" % invalid_char) pymongo.errors.InvalidName: database names cannot contain the character '.'
任何幫助都非常感謝!我覺得我已經嘗試了各種連接設定組合。這是在將我的應用程式推送到 x-code 之前我需要做的最后一件事
uj5u.com熱心網友回復:
你試過使用MongoClient(connection_string, tlsCAFile=certifi.where())嗎?
Certifi 提供 Mozilla 精心策劃的根證書集合,用于驗證 SSL 證書的可信度,同時驗證 TLS 主機的身份。
在測驗新代碼之前記得做“ pip install certifi”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525254.html
