Para o desafio da aula 2 de Pipeline de dados: integrando Python com MongoDB e MySQL, criei o código abaixo:
from pymongo.mongo_client import MongoClient
from pymongo.server_api import ServerApi
import requests as req
class mongodb:
def __init__(self,uri):
self.uri = uri
self.client = self.__connect_mongo()
self.db = None
self.col = None
def __connect_mongo(self):
# Create a new client and connect to the server
client = MongoClient(self.uri, server_api=ServerApi('1'))
# Send a ping to confirm a successful connection
try:
client.admin.command('ping')
print("You successfully connected to MongoDB!")
except Exception as e:
print(e)
return client
def create_connect_db(self,db_name):
db = self.client[db_name]
self.db = db
return db
def create_connect_collection(self,collection_name):
col = self.db[collection_name]
self.col = col
return col
def extract_api_data(self,url):
resp = req.get(url).json()
return resp
def insert_data(self,data):
self.col.insert_many(data)
def list_databases(self):
bases = self.client.list_database_names()
return bases
def list_collections(self):
cols = self.db.list_collection_names()
return cols
print('Olá, bem vindo a conexão Python_MongoBd')
uri = input('\nDigite sua "uri" para iniciar:\n')
mongo = mongodb(uri)
print('\nEscolha qual database deseja conectar, ou digite um novo nome para criar:')
print(mongo.list_databases())
database = input('\ndb: ')
mongo.create_connect_db(database)
if len(mongo.list_collections()) == 0:
collection = input('\nDigite o nome do novo collection:\n')
else:
print('\nEscolha qual collection deseja conectar, ou digite um novo nome para criar:')
print(mongo.list_collections())
collection = input('\nCollection: ')
mongo.create_connect_collection(collection)
url = input('\nDigite a url api que deseja extrair os dados: \n')
dados = mongo.extract_api_data(url)
resp = ''
while resp.lower() != 'n' and resp.lower() != 's':
print(f'\nForam extraídos {len(dados)} deseja inserí-los na collection {collection} na base {database}?')
resp = input('(S/N): ')
if resp.lower() == 's':
mongo.insert_data(dados)
print('\nDados inseridos com sucesso!')
else:
print('\nOperação abortada!')
Ele funciona bem, só em alguns dos testes que depois que colo minha uri, os sistema não responde, não retorna erro, nem tão pouco sucesso, sendo necessário interromper e reiniciá-lo, talvez algum problema de conexão com o mongo.