Быстрый в изучении - мощный в программировании
>> 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. Здесь вы найдете различные качественные биологические индикаторы по самым доступным ценам.