home > notícias

ASSOCIADOS

22/10/2019

MongoDB + Python – Consultando Dados [Mult-e Engenharia Digital]

Por Alexandre Winkel dos Santos

Aplicações que utilizam bancos de dados NoSQL (not only SQL) – atenção – é “not only SQL”, diferente de “no SQL” – não estruturadas, estão em crescimento. Para mineração de dados na internet seja qual for a origem, isso não é moda, é necessário, visto que as informações geradas, na grande maioria das vezes, são de forma não relacional e não estruturadas. Também há a crescente demanda para o armazenamento de grandes volumes de dados, e o tratamento nos SGBDs NoSQL são um tanto peculiares – hoje ainda podemos utilizar esta palavra – são parecidas, mas não iguais. Estes gerenciadores de dados possuem maior poder de flexibilidade e escalabilidade – nasceram numa época diferente dos SGBDs SQL. Os SGBDs NoSQL nasceram com a visão atual, quem sabe até futura, para estes tipos de demanda.

Nesse caso, o MongoDB é de longe o mais utilizado atualmente, comprovado pelas pesquisas (https://db-engines.com/en/ranking).

Paralelamente e particularmente, a linguagem Python tem minha preferencia para a utilização desta ferramenta (o MongoDB), ambos são poderosos e conversam muito bem. Bibliotecas para Python possuem recursos excelentes, para slice, dice e outras técnicas de tratamento dos dados não estruturados. Sabemos que com linguagens SQL há a possibilidade de utilização, porém o esforço será muito, muito maior – repeti o muito propositadamente.

 

Veremos um pequeno exemplo retirado do site minerandodados.com.br:

O primeiro passo é instalar a biblioteca PyMongo com o comando abaixo – partindo do pressuposto que o Python e o MongoDB Server já estão em seu ambiente de desenvolvimento.

pip install pymongo

 

Após instalar o PyMongo, importamos a classe MongoClient, no seu código.

from pymongo import MongoClient

 

Com a classe definida, podemos efetuar a conexão com os parâmetros de IP do servidor e porta (máquina local). A porta padrão do MongoDB é 27017, especifique conforme o seu ambiente.

client = MongoClient('localhost', 27017)

 

Depois de efetuarmos a conexão com a instância, podemos especificar um banco de dados.

Vamos trabalhar com diversos bancos de dados na mesma instância de MongoDB. Para isso utilize a variável client definida anteriormente para criar o respectivo.

db = client['database']

 

A variável db contém o objeto que aponta para o nosso banco de dados ‘database’.

O segundo passo é criarmos uma coleção, que chamaremos de ‘books’. Esta coleção trata-se de um grupo de documentos MongoDB. É o equivalente a uma tabela de um RDBMS. Uma coleção existe dentro de um único banco de dados. Coleções não impõem um esquema – uma das grandes diferenças aos bancos de dados relacionais. Documentos dentro de uma coleção podem possuir diferentes campos. Normalmente, todos os documentos em uma coleção são semelhantes.

books = db['books']

 

Com a conexão junto a instância efetuada, temos disponível nosso banco de dados e coleção, podendo agora inserir alguns dados.

O MongoDB trabalha com os dados no formato JSON, como no exemplo abaixo. Nos treinamentos Python, vemos bastante semelhança quando queremos efetuar os tratamentos em dados nas nossas listas ou mesmo em tuplas.

Para inserirmos os registros na coleção, execute:

// Insert one

db.books.insert({"isbn": 9780060859749, "title": "After Alice: A Novel", "author": "Gregory Maguire", "category": "Fiction", "year":2016})

// Insert multiple  

db.books.insert([

    { "isbn":"9781853260001", "title": "Pride and Prejudice", "author": "Jane Austen", "category": "Fiction"},

    {"isbn": "9780743273565", "title": "The Great Gatsby", "author": "F. Scott Fitzgerald"}

    ])

 

Sim, sim, poderíamos utilizar o “insert_many” para inserirmos múltiplos registros de uma vez, porém isso fica para o próximo artigo.

Agora que nossos registros já foram inseridos na coleção, vamos fazer algumas consultas.

Para imprimir todos os registros de uma coleção, vamos simplesmente utilizar o laço for. (Nada mais “pythonico” que isso hein?)

for b in books.find():

print(b)

 

Que tranquilidade…

E para filtrar por algum determinado atributo, podemos fazer o seguinte:

for b in books.find({"author" : " Jane Austen"}):

print (b)

 

Continuamos tranquilos, não?

Estamos agora filtrando os livros do autor Jane Austen.

E para contarmos todos os registros de uma coleção?

books.count()

3

Uau!

 

Para contar os registros utilizando um filtro?

books.find({"author" : " Jane Austen "}).count()

1

 

Pessoal, por ora é isso…

Este tema trata-se de exemplos muito simples, mas tivemos uma pequena ideia das diferenças para comandos em SGBDs puramente SQL, utilizando os SELECTS, WHERES, INS, cases, cursores, etecetera e tal. Vale salientar a facilidade do Python, onde todos os comandos aqui exemplificados rodam diretamente na linha de comando do interpretador. Muito simples!

Abraços

 

Fonte: Mult-e Engenharia Digital



NOTÍCIAS RELACIONADAS
05/11/2019
Outubro Rosa BP: BP realiza oficina de turbantes africanos [BP - A Beneficência Portuguesa de São Paulo]
05/11/2019
Óleo no litoral do Nordeste Brasileiro. Quem paga essa conta? [Brasil Salomão e Matthes Advocacia]
05/11/2019
As condições gerais do acordo para pagamento de débitos fiscais da medida provisória 899/19 (“MP do contribuinte Legal”) [Cardillo & Prado Rossi Soc. Adv]
05/11/2019
A Arbitragem em Contratos da Administração Pública [Diamantino Advogados]
05/11/2019
5 erros de recrutadores durante o processo seletivo [AVANCE AUTHENT RH]
05/11/2019
Como a computação quântica afetará nossas vidas daqui dez anos? [Acti-Solução Máxima em TI]