Рубрики
Без рубрики

Как использовать Django с Mongodb, добавив только одну строку кода.

Автор оригинала: FreeCodeCapm Team.

Сидди Дзен

Использовать Mongodb как ваша база данных Backeng в вашем проекте Django просто добавьте эта одна линия в ваши настройки .py файл:

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

Это так просто!

Затем войдите в свой администратор Home (Localhost: 8000/admin/) и начните добавлять «встроенные документы» в Mongodb, используя администратор GUI:

В октябре 2017 года Mongodb закончил последний шаг в общении, Цена его IPO по 24 $ и повышение 192 миллионов долларов в процессе. Финансы компании неуклонно растут:

Mongodb предоставляет программное обеспечение для баз данных с открытой баз данных. Это очень полезно для начала стартапов раннего этапа, которые стремятся запускать, будучи ограничены жесткими бюджетами. Обзор поисковых тенденций Google для Mongodb выявил устойчивое увеличение интереса.

Mongodb все больше становится популярным программным обеспечением баз данных для работы с. Базы данных и системы управления базами данных (СУБД) существовали более пяти десятилетий. Они появились в начале 1960-х годов, а самый популярный аромат был системой реляционной базы данных.

Но MongoDB переходит называть себя «не реляционной» системой базы данных и делает высокие претензии о своем подходе к хранению данных. Итак, что именно здесь большая дело?

Mongodb vs sql.

В значительной степени все системы реляционных баз данных используют структурированный язык запроса (SQL) (или настраиваемая версия) для связи с программным обеспечением управления данными. Несколько университетских курсов посвящены пониманию и овладению синтаксиса SQL.

SQL стал языком де-факто для работы с любым программным обеспечением базы данных (DB), проприетарным или открытым исходным кодом. Затем Монгодб пришел и решил показать полное игнорирование на этот древний язык власти и ввел свой собственный синтаксис запроса.

Mongodb Schemaless VS SQL Schema: В базе данных SQL невозможно добавить данные, пока вы не определите таблицы и типы полевых типов в то, что называется схемой. В базе данных MongoDB данные могут быть добавлены в любое место в любое время. Нет необходимости указывать дизайн документа или даже коллекцию UP-Front.

Документы MongoDB VS SQL Tables: Базы данных SQL предоставляют магазин связанных таблиц данных. Каждая строка – это другая запись. Дизайн жесткий: вы не можете использовать ту же таблицу для хранения различной информации или вставить строку, где ожидается номер.

База данных Mongodb хранит документы пары JSON-Like Pair. Аналогичные документы могут быть сохранены в коллекции, которая аналогична таблице SQL. Тем не менее, вы можете хранить любые данные, которые вам нравятся в любом документе – Mongodb не будет жаловаться. Таблицы SQL создают строгий шаблон данных, поэтому сложно допустить ошибки. MongoDB более гибкий и прощающий, но возможность хранить любые данные в любом месте, может привести к проблемам согласованности.

Существует множество онлайн-контента, который утверждает, что MongoDB не является сумеретом SQL. Приложения, работающие на SQL, не могут быть перенесены в MongoDB. Я выхожу на конечность здесь, чтобы утверждать, что в контексте Джанго Mongodb – суперс SQL Отказ

Так почему же самое убеждение, что Mongodb не является сумерем SQL, существует для начала?

MongoDB требует денормализации данных: В MongoDB нет поддержки присоединения. Это означает, что нам придется денормализировать наши документы. Denormalized Documents приводит к более быстрому запросам, но обновление информации о полях документа в нескольких денормальных документах будет значительно медленнее.

Там нет присоединений : SQL-запросы предлагают мощную оговорку соединения. Мы можем получить связанные данные в нескольких таблицах с использованием одного оператора SQL. В недирационных базах данных, таких как MongoDB, нет, таких как в реляционных базах данных будет в реляционных базах данных. Это означает, что вам нужно выполнить несколько запросов и присоединиться к данным вручную в вашем коде.

Нет транзакций: В базах данных SQL два или более обновлений могут быть выполнены в транзакции – оболочкой все или ничего, что гарантирует успех или неудачу. Если мы выполним два обновления индивидуально, можно было бы преуспеть, а другой выйти из строя – оставляя наши цифры из синхронизации. Размещение того же обновления в рамках транзакции гарантирует, что либо преуспевают, либо оба не удаются.

Нет внешних ключевых ограничений: Большинство баз данных SQL позволяют поддерживать правила целостности данных, используя ограничения внешних ключей. Это убедитесь, что все строки имеют допустимый внешний ключ для кода, который соответствует одной записи в таблице Join, и гарантирует, что запись из таблицы присоединения не удаляется, если на них по-прежнему относятся один или несколько строк.

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

Необходимость модели базы данных

Объекты – это абстракция Питона для данных. Все данные в программе Python представлены объектами или отношениями между объектами. Хотя объекты являются хорошим способом представления данных, возникает проблема, когда мы хотим сделать данные постоянными. Количество данных может быть огромным, и она должна быть восстановлена от постоянной памяти быстро и эффективно. Это программное обеспечение для базы данных необходимо использовать для хранения объектов. Возможное программное обеспечение для базы данных – это реляционное программное обеспечение для базы данных базы данных SQL.

Объектно-реляционный Mapper (ORM) – это библиотека кодовой библиотеки, которая автоматизирует передачу данных, сохраненных в таблицах реляционных баз данных в объекты Python, которые используются в Python Code. ОРМ предоставляют высокоуровневую абстракцию при реляционной базе данных, которая позволяет разработчику записывать код Python вместо SQL Syntax для создания, чтения, обновления и удаления данных и схем в своей базе данных. Разработчики могут использовать язык программирования Python, с которым они удобны вместо записи операторов SQL или сохраненные процедуры.

Пример ORM Framework для Python является SQLALCHEMY. SQLALCHEMY ORM представляет метод ассоциирования пользовательских классов Python с таблицами базы данных и экземпляры этих классов (объектов) со строками в соответствующих таблицах. Он включает в себя систему, которая прозрачно синхронизирует все изменения в состоянии между объектами и их связанными строками. Веб-каркасы, такие как колба, используйте SQLALCHEMY для постоянного хранения данных.

Django Orm: Django поставляется с собственным ORM или моделью для коротких. Модель является единственным, окончательным источником информации о ваших данных. Он содержит основные поля и поведение данных, которые вы храните. Как правило, каждая модель отображает на одну таблицу базы данных. Модель Django также позволяет переключаться между различными реляционными базами данных, такими как Oracle SQL, MySQL или MSSQL.

Использование Django ORM для добавления документов в MongoDB

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

В вашем блоге Приложение/Модели .py Файл определить Blogcontent модель:

from djongo import modelsfrom djongo.models import forms
class BlogContent(models.Model):    comment = models.CharField(max_length=100)    author = models.CharField(max_length=100)    class Meta:        abstract = True

Чтобы получить доступ к модели с помощью администратора Django, вам понадобится определение формы для вышеуказанной модели. Определите его, как показано ниже:

class BlogContentForm(forms.ModelForm):    class Meta:        model = BlogContent        fields = (            'comment', 'author'        )

Сейчас «встроить» ваш Blogcontent внутри Blogpost используя EmbeddedModelfield Как показано ниже:

class BlogPost(models.Model):    h1 = models.CharField(max_length=100)    content = models.EmbeddedModelField(        model_container=BlogContent,        model_form=BlogContentForm    )   

Вот и все, что вы установлены! Огонь у Джанго админ на localhost: 8000/admin/И это то, что вы получаете:

Далее предположим, что вы хотите «продлить» авторское поле, чтобы содержать больше, чем просто имя. Вам нужно как имя, так и электронное письмо. Просто сделайте поле автора «Встроенное» поле вместо поля «CHAR»:

class Author(models.Model):    name = models.CharField(max_length=100)    email = models.CharField(max_length=100)    class Meta:        abstract = Trueclass AuthorForm(forms.ModelForm):    class Meta:        model = Author        fields = (            'name', 'email'        )
class BlogContent(models.Model):    comment = models.CharField(max_length=100)    author = models.EmbeddedModelField(        model_container=Author,        model_form=AuthorForm    )    class Meta:        abstract = True

Если сообщение в блоге имеет множество контента от нескольких авторов, определите новую модель:

class MultipleBlogPosts(models.Model):    h1 = models.CharField(max_length=100)    content = models.ArrayModelField(        model_container=BlogContent,        model_form=BlogContentForm    )

Огонь amango admin с новыми изменениями, и у вас есть:

Способы интеграции Django и MongoDB.

Орм Django состоит из нескольких слоев абстракции, сложенных друг на друга.

Как веб-разработчик, вы можете принять решение подключения Django в MongoDB двумя способами. Взгляните на стек Django Framework выше, чтобы угадать возможные точки входа.

Используйте совместимую модель MongoDB

Вы можете полностью избежать использовать «батареи включены» модели Django в вашем проекте. Вместо этого используйте третьей партии, такую как MongoEngine или Ming в проектах Django.

Выбор другой модели означает, что вы пропустите:

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

Некоторые из этих недостатков компенсированы, вытекав новую ветвь сама Джанго. Django-Nonrel – это независимая филиал Django, которая добавляет поддержку базы данных NoSQL в Django. Django-unrel Допускает написание портативных приложений Django. Однако интерфейс администратора не работает полностью. На проекте Django-Nonrel не существует активного развития.

Django Mongodb Engine Является еще одним монгодбным бэкэндом для Джанго, который является вилкой от Mongoengine ODM.

Django SQL в Mongodb Transpiler – Djongo

Другой подход состоит в том, чтобы перевести синтаксис запроса SQL SQL Django, генерируемый Django ORM в команды Pymongo. Djongo – это один из таких SQL для компилятора запроса Mongodb. Он переводит каждую строку SQL Query в документ запроса MongoDB. В результате все модели Django и соответствующие модули работают как есть. С таким подходом вы получаете:

  • Повторное использование моделей Django: Django является стабильной структурой с постоянным развитием и улучшениями. Django Orm довольно обширной и богатой особенностью. Определение третья сторона Орм для работы с MongoDB означает воспроизведение всего Django Orm снова. Новый ORM должен постоянно выровнять с Django Orm. Несколько функций Django никогда не сделают его в третьей стороне ORM. Идея с Джонгом является повторно использовать Существующие функции Django Orm, наконец, переводят запросы SQL в синтаксис MongoDB.
  • SQL синтаксис никогда не изменится Независимо от будущих дополнений в Джанго. Используя Djongo, ваш проект теперь будущее доказательство!

Делать Django работать с MongoDB

Эмулирующая схема в MongoDB: Хотя в MongoDB нет поддержки схемы в MongoDB, это может быть эмулировано. Djongo предоставляет поддержку схемы, необходимую в Django, используя и определяя комбинацию правил валидатора Mongodb и создавая __schema__ коллекция. __schema__ Сборник хранит информацию для поддержки функций, таких как ключ Autoincrement SQL.

Присоединяйтесь к поддержке в MongoDB: В версии 3.2 Mongodb представил $ lookup оператор. Он выполняет левый внешний присоединение к коллекции в той же базе данных для фильтрации в документах из «присоединенной» коллекции для обработки. $ lookup Этап делает матч равенства между полем от входных документов с полем из документов «объединенной» коллекции.

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

Джонго использует $ lookup Оператор агрегации для выполнения всех запросов соединения Django. Это то, как он делает админ и другие модули работы как есть.

Поддержка транзакции в MongoDB: Несмотря на силу однодоменных атомных операций, существуют случаи, которые требуют сделки с несколькими документами. При выполнении транзакции, состоящей из последовательных операций, возникают определенные проблемы, в которых одна операция не удалась, предыдущая операция в транзакции должна «откат» до предыдущего состояния – то есть «все или ничего».

Для ситуаций, которые требуют многодоменных транзакций, Djongo реализует Двухфазный фиксатор Узор для обеспечения поддержки подобных обновлений нескольких документов. Использование двухфазного коммитана гарантирует, что данные являются согласованными и, в случае ошибки, состоянию, предшествовавшую транзакцию, возникают.

Django поставляется со своим собственным набором компромиссов. Итак, каковы недостатки выбора для использования Django для вашего проекта Django?

Производительность: Django Orm делает тяжелую подъем преобразования сложных манипуляций объекта для стандартных строк запроса SQL. Если ваша база данных Backenc была на основе SQL, вы можете передать эту строку запроса непосредственно к нему практически без постобработки. Однако с Djongo строка запроса теперь должна быть преобразована в документ запроса MongoDB.

Это потребует некоторых циклов ЦП. Но если Extra Cycles действительно такая проблема, вы, вероятно, не должны использовать Python в первую очередь.

Заключение

Я взял вас через несколько способов интеграции Джанго с MongoDB. Вы найдете множество онлайн-литературы, описывающие монгоэмин и другие варианты для этого.

Я сосредоточился на Джонго который является новым разъемом, который делает это возможным по-другому. Легко использовать и делает процесс миграции от SQL Backend в Mongodb очень простым, Добавляя только одну строку кода Отказ