Python Data Persistence - módulo PyMongo
MongoDB é um orientado a documentos NoSQLbase de dados. É um banco de dados de plataforma cruzada distribuído sob licença pública do lado do servidor. Ele usa documentos semelhantes a JSON como esquema.
Para fornecer capacidade de armazenamento de dados enormes, mais de um servidor físico (chamados de shards) são interconectados, de forma que uma escalabilidade horizontal seja alcançada. O banco de dados MongoDB consiste em documentos.
Um documento é análogo a uma linha em uma tabela de banco de dados relacional. No entanto, ele não possui um esquema específico. Documento é uma coleção de pares de valores-chave - semelhante ao dicionário. No entanto, o número de pares kv em cada documento pode variar. Assim como uma tabela no banco de dados relacional tem uma chave primária, o documento no banco de dados MongoDB tem uma chave especial chamada"_id".
Antes de ver como o banco de dados MongoDB é usado com Python, vamos entender brevemente como instalar e iniciar o MongoDB. A comunidade e a versão comercial do MongoDB estão disponíveis. A versão da comunidade pode ser baixada em www.mongodb.com/download-center/community .
Supondo que o MongoDB esteja instalado em c: \ mongodb, o servidor pode ser chamado usando o seguinte comando.
c:\mongodb\bin>mongod
O servidor MongoDB está ativo na porta número 22017 por padrão. Os bancos de dados são armazenados na pasta data / bin por padrão, embora o local possa ser alterado pela opção –dbpath.
MongoDB tem seu próprio conjunto de comandos para ser usado em um shell MongoDB. Para invocar o shell, useMongo comando.
x:\mongodb\bin>mongo
Um prompt de shell semelhante ao prompt de shell do MySQL ou SQLite aparece antes do qual os comandos nativos NoSQL podem ser executados. No entanto, estamos interessados em conectar o banco de dados MongoDB ao Python.
PyMongoO módulo foi desenvolvido pela própria MongoDB Inc para fornecer interface de programação Python. Use o utilitário pip bem conhecido para instalar o PyMongo.
pip3 install pymongo
Supondo que o servidor MongoDB esteja instalado e funcionando (com mongod comando) e está escutando na porta 22017, primeiro precisamos declarar um MongoClientobjeto. Ele controla todas as transações entre a sessão Python e o banco de dados.
from pymongo import MongoClient
client=MongoClient()
Use este objeto cliente para estabelecer conexão com o servidor MongoDB.
client = MongoClient('localhost', 27017)
Um novo banco de dados é criado com o seguinte comando.
db=client.newdb
O banco de dados MongoDB pode ter muitas coleções, semelhantes às tabelas em um banco de dados relacional. Um objeto de coleção é criado porCreate_collection() função.
db.create_collection('students')
Agora, podemos adicionar um ou mais documentos à coleção da seguinte maneira -
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()
Para recuperar os documentos (semelhante à consulta SELECT), devemos usar find()método. Ele retorna um cursor com a ajuda do qual todos os documentos podem ser obtidos.
students=db['students']
docs=students.find()
for doc in docs:
print (doc['Name'], doc['age'], doc['marks'] )
Para encontrar um determinado documento em vez de todos eles em uma coleção, precisamos aplicar o filtro para o método find (). O filtro usa operadores lógicos. MongoDB tem seu próprio conjunto de operadores lógicos conforme abaixo -
Sr. Não | Operador MongoDB e operador lógico tradicional |
---|---|
1 | $eq igual a (==) |
2 | $gt maior que (>) |
3 | $gte maior ou igual a (> =) |
4 | $in se igual a qualquer valor na matriz |
5 | $lt menos que (<) |
6 | $lte menor ou igual a (<=) |
7 | $ne diferente de (! =) |
8 | $nin se não for igual a qualquer valor na matriz |
Por exemplo, estamos interessados em obter lista de alunos com mais de 21 anos. Usando o operador $ gt no filtro parafind() método da seguinte forma -
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
print (doc.get('Name'), doc.get('age'), doc.get('marks'))
O módulo PyMongo fornece update_one() e update_many() métodos para modificar um documento ou mais de um documento que satisfaça uma expressão de filtro específica.
Vamos atualizar o atributo de marcas de um documento cujo nome é Juhi.
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()