Как использовать Django с MongoDB

Как использовать Django с MongoDB

S0mebody



Без лишних слов я расскажуо преимуществах использования MongoDB с Django:

  • Каждую секунду из различных источников, таких как чаты, ленты новостей и опросы, генерируется все больше и больше неструктурированных данных.
  • Данные необходимо надежно хранить в масштабируемой, производительной и не жесткой системе хранения, что упрощает анализ и визуализацию данных.
  • Поиск данных прост благодаря более простой структуре хранения. Эта простота позволяет легко получить доступ даже к вложенным элементам и не требует сложных объединений.


Как Django подключается к MongoDB?


Есть три способа подключить Django к MongoDB:

  • PyMongo - это стандартный драйвер, через который MongoDB может взаимодействовать с Django. Это официальный и предпочтительный способ использования MongoDB с Python. PyMongo предоставляет функциональные возможности для выполнения всех действий с базой данных, таких как поиск, удаление, обновление и вставка.
  • MongoEngine - это Python Object-Document-Mapper. Он похож на Object-Relational-Mapper в реляционных базах данных. MongoEngine имеет декларативный API, который легко изучить и использовать.
  • Djongo - если вы используете реляционную базу данных, такую ​​как SQL, и хотите перейти на MongoDB, для этого вы можете использовать Djongo. Не меняя Django ORM, Djongo переносит все запросы SQL в запросы синтаксиса MongoDB.


Подключите Django и MongoDB с помощью PyMongo


Если у вас еще не настроен MongoDB, используйте MongoDB Atlas, чтобы максимально эффективно использовать облачный хостинг. Atlas без проблем работает со всеми основными поставщиками облачных услуг.


PyMongo очень эффективен для записи данных JSON в MongoDB и позволяет использовать запросы MongoDB в самом коде Python. Мы можем получить данные в словаре, подобном синтаксису, с помощью PyMongo.


Установите PyMongo:

pip install pymongo[snappy,gssapi,srv,tls]

Также установите dnspython для использования URI mongodb + srv: // с помощью команды:

pip install dnspython


Давайте создадим образец сеанса PyMongo. Для этого есть два подхода:

  • Мы можем создать клиента в файле utils, который может использоваться любым представлением(view), которое хочет взаимодействовать с MongoDB. Создайте файл utils.py в папке проекта (в том же месте, что и manage.py) и создайте экземпляр клиента:
from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):

 client = MongoClient(host=host,
                      port=int(port),
                      username=username,
                      password=password
                     )
 db_handle = client['db_name']
 return db_handle, client
  • Другой способ получить соединение - использовать connection_string:
connection_string = mongodb+srv://<username>:<password>@<atlas cluster>
/<myFirstDatabase>?retryWrites=true&w=majority

from pymongo import MongoClient
client = pymongo.MongoClient('localhost', 27017)
db = client['db_name']

А теперь для создания БД и наших первых коллекций:

makemyrx_db = client['sample_medicines']
medicines_collection = makemyrx_db['medicinedetails']

Вы можете найти больше информации о PyMongo и Mongo в целом здесь.


Подключите Django и MongoDB с помощью MongoEngine

MongoEngine - это слой ORM поверх PyMongo. Итак, вам все еще нужен PyMongo в вашей системе для использования MongoEngine.


Использование MongoEngine для подключения Django и MongoDB дает вам такие поля, как ListField и DictField, для обработки огромных неструктурированных данных JSON.


Сначала установите MongoEngine, используя:

pip install mongoengine

Как мы видели в предыдущем разделе, при использовании PyMongo мы должны прокомментировать раздел DATABASES в settings.py. Затем, чтобы использовать MongoEngine, добавьте следующее:

import mongoengine
mongoengine.connect(db=db_name, host=hostname, username=username, password=pwd)

В MongoEngine мы должны определить схему в файле models.py. MongoDB не имеет схемы. Схема применяется только до уровня приложения, что позволяет быстро и легко вносить любые изменения в будущем.


MongoEngine похож на ORM Django по умолчанию, но со следующими изменениями в model.py:

Разница в том, что мы использовали модели, которые заменялись документами и полями при использовании MongoEngine.


Вы можете найти больше информации о MongoEngine здесь.


Подключите Django и MongoDB с помощью Djongo

Djongo - это улучшение по сравнению с PyMongo в том, что разработчикам не нужно писать длинные запросы. Он сопоставляет объекты Python с документами MongoDB. Djongo гарантирует, что в базу данных попадают только чистые данные. Выполняя проверки целостности, применяя проверки и т. Д. С помощью Djongo, нет необходимости изменять существующий Django ORM.


Установите Djongo:

pip install djongo

Теперь перейдите в папку вашего проекта и откройте файл settings.py. Найдите DATABASES и измените настройки так, чтобы они указывали на MongoDB. ENGINE будет djongo, а имя базы данных будет именем вашей базы данных MongoDB:

DATABASES = {
       'default': {
           'ENGINE': 'djongo',
           'NAME': 'db-name',
       }
   }

Если ваша база данных не находится на локальном хосте или защищена, вы также должны заполнить информацию CLIENT, такую ​​как HOST, USERNAME, PASSWORD и т. Д.

DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'your-db-name',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'
            }  
        }
}

Убедитесь, что имя приложения добавлено в параметр INSTALLED_APPS вашего settings.py:

INSTALLED_APPS = [
    'test',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Теперь, когда у нас есть проект (и приложение), вы можете создавать коллекции в MongoDB с помощью команд:

python manage.py makemigrations
python manage.py migrate

Коллекции (модель Django в приложении - обратите внимание, что мы говорим о приложении, а не о проекте) будут созданы. Вы можете проверить то же самое, открыв Django Admin.


Чтобы использовать админку, откройте браузер и перейдите по адресу http://127.0.0.1:8000/admin (или localhost). Вы должны создать суперпользователя для входа в админку. Если в вашем приложении нет моделей, следуйте руководству Django о том, как создавать и регистрировать модели.


Если вы хотите, чтобы Djongo не выполнял миграцию, установите ENFORCE_SCHEMA: False в конфигурации вашей базы данных. С этим параметром коллекции создаются «на лету», и Djongo не будет преобразовывать операторы SQL в команды MongoDB.


Django и MongoDB

В этом кратком руководстве мы продемонстрируем, как использовать PyMongo для выполнения простых операций CRUD. Для этого создадим сеанс PyMongo:

import pymongo
#connect_string = 'localhost' 

from django.conf import settings
my_client = pymongo.MongoClient(connect_string, 27017)

# Сначала определите имя базы данных
dbname = my_client['sample_medicines']

# Теперь получите / создайте имя коллекции (помните, что вы увидите базу данных в своем кластере mongodb только после создания коллекции
collection_name = dbname["medicinedetails"]

# давайте создадим два документа
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"
}
# Вставьте документы

collection_name.insert_many([medicine_1,medicine_2])
# Проверить count
count = collection_name.count()
print(count)

# Прочтите документы
med_details = collection_name.find({})
# Распечатать в терминале
for r in med_details:
    print(r["common_name"])
# Обновить один документ
update_data = collection_name.update_one({'medicine_id':'RR000123456'}, {'$set':{'common_name':'Paracetamol 500'}})

# Удалить один документ
delete_data = collection_name.delete_one({'medicine_id':'RR000123456'})

Затем вы можете подключиться к кластеру MongoDB Atlas и проверить то же самое. Щелкните коллекции, и вы увидите недавно созданную базу данных и коллекцию слева:

Справа вы увидите одну запись (поскольку мы удалили одну):


Следующие шаги

Теперь, когда мы знаем разные способы подключения Django и MongoDB, нам нужно выбрать подходящий для нашего проекта. У подходов есть свои плюсы и минусы.


Например, если вы начинаете с нуля, MongoEngine хороший вариант, поскольку он легко справляется с большим количеством неструктурированных данных. Если у вас есть много сложных запросов, которые нужно написать в вашем приложении, вам следует использовать PyMongo.


Djongo больше подходит, если у вас есть проект Django, который необходимо перенести на MongoDB из другой базы данных, так как это потребует наименьшего количества изменений кода.

Report Page