【问题标题】:How to connect Django ORM to mongo atlas?如何将 Django ORM 连接到 mongo atlas?
【发布时间】:2019-04-05 21:38:50
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以使用pymongo进行连接,不需要使用djongo
  • 确实如此,但在这种情况下你不完全绕过orm吗?
  • 你在生产环境中使用 djongo 吗?
  • 目前它处于开发阶段,但最终目标是将其上线。这是关于个人项目,而不是公司项目。我不会在我的公司的生产中尝试它。不是因为它质量不高,而是因为我害怕一个人的项目(虽然有很多贡献者)

标签: django mongodb mongodb-atlas djongo


【解决方案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>',
    }
}

希望有帮助!

【讨论】:

  • 确保您已安装 Djongo。 “点安装 djongo”。
  • 和我的很像……虽然魔鬼藏在细节里。我会检查并通知你
  • 我已经应用了您发布的模板,添加了我的凭据和值,但仍然无法正常工作。我也尝试过转义我的密码。依然没有。只是为了确保,您能否发布一个可以看到数据库名称的屏幕截图,以验证我没有输入错误的数据库名称(也许我正在放置集群)。谢谢
  • 关于如何使用 mongoengine 连接它的任何想法??
  • 我无法使用此方法 - 即使使用没有时髦字符的 atlas 生成密码。我注意到 djongo 正在卸载 django 安装的 3.1 版本并将 django 安装到 3.0.5 - 不确定这是否是原因,但 Nagarjun 描述的方法对我有用。
【解决方案2】:

使用安装 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 给出的主机名。

【讨论】:

    【解决方案3】:

    在没有任何 hack 的情况下完成了这个工作,如下所示:

    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

    【讨论】:

    • 我尝试了检查的答案,但遇到了很多困难。经过一个小时的调试,我尝试了这个,它首先工作!我已经为其他项目准备了 dnspython。谢谢:D
    【解决方案4】:

    最简单正确的解决方案:

    第 1 步:安装 djongo 和 dnspython

    pip 安装 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】:

      我已经通过使用来自@Market Ahead here 的 sn-p 成功地使用 djongo 连接到 mongo atlas

      看起来他们不希望密码里面有奇怪的字符。在这种情况下,即使转义也无法达到最佳效果。

      【讨论】:

      • 您接受了自己的答案并参考了实际答案
      【解决方案6】:

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

      HOST = "mongodb+srv://&lt;Username&gt;:&lt;password&gt;@cluster0-gbdot.mongodb.net/&lt;databaseName&gt;?retryWrites=true&amp;w=majority"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-21
        • 2019-07-30
        • 1970-01-01
        • 2021-09-01
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        相关资源
        最近更新 更多