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

时间:2019-04-05 21:38:50

标签: django mongodb atlas djongo

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

  • 安装dnspython
  • DATABASES中具有以下settings.py
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

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

6 个答案:

答案 0 :(得分:2)

按照以下步骤进行工作:

  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 :(得分:1)

我只需使用以下命令设置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>',
    }
}

希望有帮助!

答案 2 :(得分:1)

通过使用@Market Ahead here

中的代码段,我设法通过djongo连接到了mongo地图集

似乎他们不希望密码中包含奇怪的字符。在这种情况下,即使转义也无法达到最佳效果。

答案 3 :(得分:1)

使用以下命令安装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提供的主机名。

答案 4 :(得分:1)

最简单正确的解决方案:

步骤1:安装djongo和dnspython

pip install djongo

pip安装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",
    },
}}

答案 5 :(得分:0)

编辑数据库的 settings.py 后,转到 env lib 并在 pymongo/mongo_client.py 中进行这些更改

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