Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

MongoDB и Python

mongodb и python

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

Далее мы рассмотрим, как можно работать с Python и ориентированной на документы базой данных MongoDB. Для начала необходимо загрузить с официального сайта http://www.mongodb.org/downloads проекта сам инструмент, нам нужна самая актуальная стабильная версия. Итак, скачали, распаковали, и видим такое:

. ├── bin │ ├── bsondump │ ├── mongo │ ├── mongod │ ├── mongodump │ ├── mongoexport │ ├── mongofiles │ ├── mongoimport │ ├── mongorestore │ ├── mongos │ ├── mongosniff │ └── mongostat ├── GNU-AGPL-3.0 ├── README └── THIRD-PARTY-NOTICES

Стартуем сервер базы данных mogod и получаем такое уведомление:

exception in initAndListen std::exception: dbpath (/data/db/) does not exist, terminating

Для того, чтобы сервер нормально работал нам нужен каталог, по стандартным настройкам указан /data/db. Чтобы указать свой воспользуемся ключом – dbpath:

bin/mongod --dbpath /home/toly/db

Далее нужно скачать и установить библиотеку Python ползволяющую работать с MongoDB:

git clone git://github.com/mongodb/mongo-python-driver.git pymongo cd pymongo sudo ./setup.py install

Прежде чем приводить пример комментированного кода разъясню как организованы данные в MongoDB. Один сервер может содержать сразу несколько БД. В базу мы можем помещать сразу несколько сборок документов. Если сравнивать с привычной MySQL, то это похоже на таблицы. В коллекциях размещены документы. А сам документ это сериализированные данные представленные в JSON формате. К примеру, если у нас имеется документ из картотеки персонала, то он будет иметь следующий вид:

{"Фамилия":"Петров", "Имя": "Петр", "Отчество": "Петрович", "Адрес": {"Город": "Новосибирск", "Улица": "Строителей", "Дом": 12, "Квартира": 8}}

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

Теперь рассмотрим код с комментариями, в котором показано, как нужно работать с библиотекой pymongo:

# импортируем pymongo import pymongo # соединяемся с сервером базы данных # (по умолчанию подключение осуществляется на localhost:27017) conn = pymongo.Connection() # подключаемся к другому серверу, на другой порт conn = pymongo.Connection('localhost', 27017) # выбираем базу данных db = conn.mydb # БД можно выбрать и так db = conn['mydb'] # выбираем коллекцию документов coll = db.mycoll # альтернативный выбор коллекции документов coll = db['mycoll'] # осуществляем добавление документа в коллекцию, # который содержит поля name и surname - имя и фамилия doc = {"name":"Иван", "surname":"Иванов"} coll.save(doc) # альтернативное добавление документа coll.save({"name":"Петр", "surname":"Петров"}) # выводим все документы из коллекции coll for men in coll.find(): print men # выводим фамилии людей с именем Петр for men in coll.find({"name": "Петр"}) print men["surname"] # подсчет количества людей с именем Петр print coll.find({"name": "Петр"}).count() # добавляем ко всем документам новое поле sex - пол coll.update({}, {"$set":{"sex": "мужской"}}) # всем Петрам делаем фамилию Новосельцев и возраст 25 лет coll.update({"name": "Петр"}, {"surname": "Новосельцев", "age": 25}) # увеличиваем всем Петрам возраст на 5 лет coll.update({"name": "Петр"}, {"$inc": {"age": 5}}) # сбрасываем у всех документов поле name coll.update({}, {"$unset": {"name": 1}}) # удаляем людей с возрастом более 20 лет # другие условия $gt - больше, $lt - меньше, # $lte - меньше или равно, $gte - больше или равно, $ne - не равно coll.remove({"age": {"$gt": 20}}) # удаляем все документы коллекции coll.remove({})

Вот и все, ничего сложного вроде бы нет.

А если вам нужны биологические индикаторы, с помощь которых вы вовремя зафиксируете изменения окружающей среды, заходите на сайт http://www.ru.all.biz/indikatory-biologicheskie-bgg1041525. Здесь вы найдете различные качественные биологические индикаторы по самым доступным ценам.