Задать вопрос
@plx49638

Как подключить Django к MongoDB?

docker-compose
mongo:
    image: mongo:latest
    ports:
      - "27019:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example


django:
    build:
      context: ./django

    ports:
      - "8001:8000"
  
    environment:
      MONGO_DB_USER: "root"
      MONGO_DB_PASSWORD: "example"
      MONGO_DB_HOST: "mongo"
      MONGO_DB_PORT: "27019"


Файл подключения
import pymongo
import environ
import os.path
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
env = environ.Env()
environ.Env.read_env(env_file=os.path.join(BASE_DIR, '.env'))
string_connect = "mongodb://"+env('MONGO_DB_USER')+":"+env('MONGO_DB_PASSWORD')+"@"+env('MONGO_DB_HOST')+":"+env('MONGO_DB_PORT')+"/"
myClient = pymongo.MongoClient(host=env('MONGO_DB_HOST'),
                      port=int(env('MONGO_DB_PORT')),
                      username=env('MONGO_DB_USER'),
                      password=env('MONGO_DB_PASSWORD'))


Файл добавления записей в бд

def get(self, request, **kwargs):

      test_bd= utils.myClient['test_bd']
      filds= test_bd['filds']
      # let's create two documents
      medicine_1 = {
        "medicine_id": "RR000123456",
        "common_name": "Paracetamol",
        "scientific_name": "",
        "available": "Y",
        "category": "fever"
      }
      medicine_2 = {
        "medicine_id": "RR000342522",
        "common_name": "Metformin",
        "scientific_name": "",
        "available": "Y",
        "category": "type 2 diabetes"
      }
      # Insert the documents
     #filds.insert_many([medicine_1, medicine_2])
     #count = filds.count()
      return Response({"res":  utils.myClient.HOST, "res1":  utils.myClient.PORT, "count": utils.string_connect })


При этом сделал вывод хоста и порта (почему то они различаются) В файле с созиданием подключения к бд

66323254eb91e790886528.png
  • Вопрос задан
  • 215 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@dronmaxman
VoIP Administrator
Типичная проблема не понимания работы сети в docker.

- "27019:27017"

Объявил из вне порт 27019 для подключения, но при этом в настроках джанго указал подключаться к внутреннему ресурсу mongo который не слушает порт 27019. Они и так в одной сети по дефолту, монго вообще не обязательно объявлять порты.

Укажи порт MONGO_DB_PORT: "27017"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы