1

我尝试连接以将 MongoDB 数据库用于 Django 项目。

所以我按照从 settings.py 更改数据库的教程

# Original
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'testDB',
}

变成

# From tutorials
 DATABASES = {
     'default': {
         'ENGINE': 'djongo',
         'NAME': 'testDB',
         'USERNAME': 'username',
         'PASSWORD': 'password',
         'HOST': 'myhostname.example',
         'PORT': '27017',
     }
 }

试图跑

python manage.py makemigrations
python manage.py migrate

一切正常,但我的数据库中没有数据

显然 django 去了 localhost:27017 主机并在那里创建了一个数据库。

卸载MongoDB,只是导致makemigrations失败

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it

我找到了解决方案。 https://stackoverflow.com/a/60244703/7637454

为了在这里完成答案,这就是您现在应该如何配置它。

DATABASES = {
  'default': {  
    'ENGINE':   'djongo',
    'NAME':     'yourmongodb',
    'CLIENT': {
      'host': 'some-host.or.ip',
      'port': 27017,
      'username': 'youruser',
      'password': 'yourdbpass',
      'authSource': 'yourcollection', # usually admin
    } 
  },
}
4

1 回答 1

1

提供的答案对我不起作用,而是我采用了以下方法。

所以,在幕后,Djongo使用PyMongo和 PyMongo 的默认配置是:

class MongoClient(common.BaseObject):
    HOST = "localhost"   # here HOST has the hardcoded value
    PORT = 27017      

它们在以下文件中:

venv/lib/python3.6/site-packages/pymongo/mongo_client.py

将硬编码的值替换为HOST类似

HOST = 'mongodb+srv://<username>:<password>@cluster-name/<dbname>?retryWrites=true&w=majority'

此外,我们可以根据需要设置环境变量

HOST = os.getenv('MONGO_DB_URL')
于 2020-06-04T11:57:07.273 回答