quinta-feira, 20 de agosto de 2015

Republicado de vivaolinux.com.br
Autor: Welton Vaz de Souza <weltonvaz@yahoo.com.br>
Data: 04/09/2013

MongoDB no Python 3

Linux: MongoDB no Python 3 No começo do ano, falei sobre Python 3 e sua adequação para aprender lógica e programação. Hoje, vou falar sobre banco de dados e como integrá-lo com linguagens como o Python.

MongoDB é um sistema de banco de dados multi-plataforma orientado a documentos, esboço livre. Como eu expliquei, isso significa que cada entrada ou registro pode ter um esquema de dados diferente, com atributos ou "colunas" que não precisam ser repetidos a partir de um registro para outro.

Ele é escrito em C++, dando-lhe uma certa proximidade com os recursos de Hardware da máquina, por isso, ele é muito rápido para implementar tarefas. Também está licenciado como GNU AGPL 3.0, de modo que é um software de licença livre. Ele funciona em sistemas operacionais Windows, GNU/Linux, OS X e Solaris.

As características de destaque do MongoDB, é a sua velocidade, seu rico e simplificado sistema de consulta para o conteúdo do banco de dados. Pode-se dizer que ele atinge um equilíbrio perfeito entre desempenho e funcionalidade, incorporando muitos dos tipos de consultas que nós usamos em nosso sistema de banco de dados relacional preferido, como MySQL e PostgreSQL mas sem sacrificar o desempenho.

No MongoDB cada registro, ou conjunto de dados, é chamado de documento. Os documentos podem ser agrupados em coleções, o que poderia dizer que são o equivalente de tabelas em um banco de dados relacional (apenas as coleções podem armazenar documentos com formatos muito diferentes, ao invés de estar sujeito a um esquema fixo).

Você pode criar índices para alguns atributos do documento, de modo que MongoDB manterá uma estrutura interna eficiente para o acesso à informação para os conteúdos desses atributos.

Os vários documentos são armazenados como BSON, ou Binary JSON, que é uma versão modificada do JSON, que permite buscas rápidas de dados. Para se ter uma ideia, BSON salva explicitamente os comprimentos dos campos, índices de matriz e outras informações úteis para os dados de digitalização.

É por isso que, em alguns casos, o mesmo documento em BSON ocupa um pouco mais de espaço do que o que seria necessário para ser armazenados diretamente em formato JSON. Mas, uma das ideias-chave em sistemas NoSQL, é que o armazenamento é barato e é melhor aproveitá-la, se você entra em um aumento significativo na velocidade de localizar informações em um documento.

No entanto, na prática, significa nunca ver o formato no qual os dados são armazenados verdadeiramente e sempre trabalhar em um documento em JSON, tanto a verificação de informações e loja.

Um exemplo de um documento no MongoDB, pode muito bem ser a seguinte:

$ mongo

Saída:
MongoDB shell version: 2.2.3
connecting to: test

> use mytest

Saída:
switched to db mytest


> db.testcollection.insert({"message":"Hello, remote user!"})
> db.addUser('myuser', 'superpassword')
{ "n" : 0, "connectionId" : 2, "err" : null, "ok" : 1 }
{
    "user" : "myuser",
    "readOnly" : false,
    "pwd" : "ecb2c08916b34e477c33c10cec2ae416",
    "_id" : ObjectId("512c6d9dcc5d103a896944ae")
}
> db.testcollection.find()
{ "_id" : ObjectId("512c6d85cc5d103a896944ad"),
  "message" : "Hello, remote user!"
}

Acima, resumimos as questões básicas, agora vamos à instalação no Ubuntu 12.04:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update && sudo apt-get install mongodb-10gen


Depois de devidamente instalado, vamos às configurações:

$ nano /etc/mongodb.conf

Descomente:

auth = true

Comente:

#bind_ip = 127.0.0.1

$ sudo service mongodb stop
$ sudo service mongodb start


Instalando o Driver para conexão com o banco de dados, no caso o PyMongo, no terminal GNU/Linux como root, digite:

Obs.: não feche o terminal depois dos comandos abaixo, nós vamos precisar dele para outras instalações.

# wget http://python-distribute.org/distribute_setup.py
# python distribute_setup.py
# easy_install pymongo


Com a linha acima, o PyMongo fica disponível para o Python que vem pré-instalado no GNU/Linux, para funcionar no Python 3. Agora, para funcionar na versão ou numa superior, no terminal do GNU/Linux aberto anteriormente como root, ainda digite:

# python3.3 distribute_setup.py
# easy_install pymongo
# python3.3


O último comando deve retornar:
Python 3.3.2 (default, Sep  2 2013, 09:42:42)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Obs.: na linha de comando do Python 3.3 interativo, digite:

>> import pymongo

Se ele pular a linha, beleza. Está tudo configurando perfeitamente. Se ele apresentar o erro, revisar os comandos anteriores.

O último teste é escrever um programa em Python para acessar a base de dados de teste do MongoDB. Agora, com o IDLE ou o Geany, COPIE para um arquivo novo e salve com a extensão ".py":

# coding:utf8
#
# Teste de acesso ao MONGODB
#

import os
os.system("clear")  # Limpando a tela

from pymongo import MongoClient
mongoserver_uri = "mongodb://myuser:superpassword@10.2.0.182:27017/mytest"  ### OBS: O IP TEM QUE SER O DA MAQUINA COM O MONGODB ESTA INSTALADO
conection = MongoClient(host=mongoserver_uri)
db = conection['mytest']
collection = db['testcollection']
print (collection.find_one())
## --------- fim do arquivo:

Execute o programa. O resultado vai ser o mesmo do teste acima:
> {u'message': u'Hello, remote user!', u'_id':
      ObjectId('5221030f0ba4e7a74ec82fe5')}



0 comentários: