如何将 Django ORM 连接到 mongo 图集?

How to connect Django ORM to mongo atlas?

我正在尝试使用 Django 将我的 Django 实例连接到 mongo 数据库集群。我已经从各种来源进行了检查,它越来越接近工作的方式是:

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'test',
        'HOST': 'mongodb+srv://mongo_usr:' + urllib.parse.quote('mypassword') + '@domain_assigned.mongodb.net/test?ssl=true&ssl_cert_reqs=CERT_NONE&retryWrites=true',
        'ENFORCE_SCHEMA': False
    }
}

它确实找到了端点,但我收到一个奇怪的错误:

pymongo.errors.ServerSelectionTimeoutError: connection closed,connection closed,connection closed

以前有人解决过这个问题吗?

我刚刚使用以下设置 Djongo 和 MongoDB Atlas:

DATABASES = {
        'default': {
        'ENGINE': 'djongo',
        'NAME': '<db name>',
        'HOST': 'mongodb+srv://<db username>:<db password>@....mongodb.net/test?retryWrites=true',
        'USER': '<db username>',
        'PASSWORD': '<db password>',
    }
}

希望对您有所帮助!

我已经通过使用来自@Market Ahead

的片段成功地连接到 mongo 带有 djongo 的 atlas

看来他们不希望密码里面有奇怪的字符。在这种情况下,即使转义也无法发挥最佳作用。

安装 djongo 包使用 pip install djongo.

确保导入以下模块:

import urllib

设置数据库设置。

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': '<db_name>',
        'HOST': "mongodb+srv://<db_username>:" +
                urllib.parse.quote_plus("<db_password>") +
                "@........mongodb.net/test?retryWrites=true&ssl=true&ssl_cert_reqs=CERT_NONE&w=majority",
    }
}

用您的凭据替换 db_username、db_name 和 db_password。

同时编辑 Mongo Atlas 给出的主机名。

在没有任何破解的情况下完成了如下工作:

  1. 安装pip install dnspython.
  2. 使用以下内容更新 settings.py,
'default': {
        'ENGINE': 'djongo',
        'NAME': '<dbname>',
        'CLIENT': {
            'host': "mongodb+srv://<username>:" + quote_plus('<password>') + "@<cluster-name>.mongodb.net/test?retryWrites=true&w=majority"
        },   
    }
  1. 运行 python manage.py makemigrations
  2. 运行 python manage.py migrate

最简单正确的解决方案:

第 1 步:安装 djongo 和 dnspython

pip install djongo

pip install dnspython

第 2 步:settings.py 中的变化:

DATABASES = {
"default": {
    "ENGINE": "djongo",
    "CLIENT": {
        "host": "mongodb+srv://<username>:<password>@<cluster_name>.mongodb.net/?retryWrites=true&w=majority",
        "username": "<username>",
        "password": "<password>",
        "name": "<database_name>",
        "authMechanism": "SCRAM-SHA-1",
    },
}}

编辑您的数据库 settings.py 后,转到您的环境库并在 pymongo/mongo_client.py

中进行这些更改

HOST = "mongodb+srv://<Username>:<password>@cluster0-gbdot.mongodb.net/<databaseName>?retryWrites=true&w=majority"