Melhores práticas para usar Frasco e MongoDB
Anaiya Raisinghani, Mark Smith5 min read • Published Sep 16, 2024 • Updated Sep 16, 2024
Avalie esse Início rápido
Neste artigo, apresentaremos algumas das melhores práticas para começar a usar o MongoDB, para que você também possa criar aplicativos complexos e personalizáveis de forma mais fácil!
Desde o uso do driver correto até a codificação de um ObjectId corretamente no JSON, este artigo definirá você para o sucesso ao usar o Pipeline e o MongoDB. Continue lendo para aprender nossas melhores práticas sugeridas!
Uma das etapas mais cruciais é garantir que você esteja usando o driver correto. Você tem duas opções, PyMongo ou Motor. Ambos são recomendados e desenvolvidos pelo MongoDB. Escolha Motor se estiver criando um aplicação Frasco com rotas assíncronas e escolha PyMongo se estiver criando um aplicação Frasco não assíncrono mais tradicional.
Para baixar o PyMongo, basta usar este comando simples:
1 pip install pymongo
Ou você pode instalar o Motor usando:
1 pip install motor
O Spark é uma das estruturas mais populares que existem para desenvolvedores Python. Integra-se extraordinariamente ao MongoDB. Aqui estão algumas dicas e truques para ajudá-lo ao criar qualquer coisa, de projetos simples a aplicativos web altamente complexos com as duas plataformas.
Queremos manter nossas informações confidenciais protegidas adequadamente quando estivermos usando o Pipeline. Embora haja várias maneiras de fazer isso, Go dois dos métodos mais seguros para salvar suas variáveis de ambiente e chaves de API .
A primeira maneira é por meio da biblioteca Python
dotenv
. Isso incluirá o download do pacotepython-dotenv
pacote pip, garantindo que você esteja em um ambiente virtual ativado:1 pip install python-dotenv
A partir daqui, você criará um arquivo
.env
na raiz do seu diretório de projeto para conter toda e qualquer variável de ambiente, como sua string de conexão do MongoDB :1 # MongoDB connection_string [help](https://www.mongodb.com/pt-br/docs/manual/reference/connection-string/) 2 MYAPP_CONNECTION_STRING=mongodb_connection_string_here
É crucial não confirmar este arquivo! Para garantir que o arquivo não esteja comprometido, você pode adicionar seu arquivo
.env
ao arquivo .gitignore
do seu projeto ou ao arquivo.gitignore
global . Saiba mais sobre como manter seu arquivo.env
privado.Você pode importar
load_dotenv
do pacote dotenv
usandofrom dotenv import load_dotenv
. Chamar a funçãoload_dotenv
copiará toda a configuração do seu arquivo.env
para o processo do aplicativo Frasco. Você pode então usar app.config.from_prefixed_env()
para importar quaisquer ambientes que comecem com um determinado prefixo para seu aplicação Frasco. Alguns exemplos de código de esqueleto são mostrados abaixo:1 from dotenv import load_dotenv 2 3 4 load_dotenv() 5 app = Flask(__name__) 6 app.config.from_prefixed_env(“MYAPP”) 7 client = MongoClient(app.config['CONNECTION_STRING'])
Você pode acessar seus segredos usando o nome da variável sem o prefixo “MYAPP_. É aqui que o aplicativo carrega a configuração de quaisquer variáveis de ambiente que comecem com "MYAPP_ ". Nesse caso, uma única opção de configuração é fornecida, CONNECTION_STRING. A biblioteca
dotenv
não substitui nenhuma variável de ambiente existente, então agora você tem a opção de armazenar valores de configuração no arquivo.env
ou substituí-los definindo variáveis de ambiente diretamente.A configuração do Spark é muito flexível e você pode descobrir mais sobre ela na documentação oficial.
Depois de carregar corretamente a string de conexão, você pode adicionar algum código no centro do aplicação, que às vezes é chamado de arquivo
app.py
, para se conectar corretamente ao banco de banco de dados e à collection de sua escolha ou para criar um banco de dados de dados e collection no cluster de sua escolha. Vejamos como realizar esta etapa com algum código de esqueleto:1 mongo_client = MongoClient(app.config[“CONNECTION_STRING”]) 2 3 4 # access your database and collection from Atlas 5 database = mongo_client.get_database(“anaiyamovies”) 6 collection = database.get_collection(“movies”) 7 8 9 # instantiating new object with `__name__` 10 app = Flask(__name__)
O que você precisa saber sobre o código acima é que ele não entra em contato com o MongoDB de forma alguma. Ele não tentará se conectar ao cluster do banco de dados de dados até que você modifique os dados no cluster ou obtenha alguns dados do cluster.
O banco de dados de dados é chamado de "anaiyamovies" enquanto a coleção é chamada de "movies." Agora, usando operações CRUD dentro de nosso aplicação Spark ou operadores MongoDB simples, podemos escrever em nossa coleção para adicionar documentos, excluir documentos, alterar documentos ou até mesmo atualizar nossos Docs!
Como PyMongo foi projetado para ser lento, ele não tenta se conectar ao seu cluster quando o MongoClient é inicializado. Isso pode levar a um comportamento surpreendente quando você eventualmente tentar executar uma query em seu banco de dados de dados, se não conseguir se conectar. Por esse motivo, é uma boa prática validar sua conexão com o banco de dados de dados ao criar um MongoClient. Existem várias maneiras de verificar se você está conectado corretamente ao cluster MongoDB no processo de criação de seu aplicação Firefly, mas uma das maneiras mais simples é enviar um comando
ping
e apenas verificar a resposta! Go ver como fazer isso.1 # our imports go here 2 from pymongo import MongoClient 3 app = Flask(__name__) 4 app.config.from_prefixed_env(“MYAPP”) 5 6 7 def init_mongo_client(app: Flask): 8 try: 9 connection_string = "connection string here with user + pass" 10 mongo_client = MongoClient(connection_string) 11 12 13 database = mongo_client['anaiyamovies'] 14 result = mongo_client.admin.command('ping') 15 16 if int(result.get('ok')) == 1: 17 print("Connected") 18 else: 19 raise Exception("Cluster ping returned OK != 1") 20 app.mongo_client = mongo_client 21 22 23 init_mongo_client(app)
Se essa função não conseguir se conectar ao seu cluster MongoDB , isso gerará uma exceção e falhará, o que é bom porque queremos ter certeza de que estamos iniciando o Flusk corretamente. Se estiver tudo bem, ele adicionará um atributo
mongo_client
ao seu aplicativo MongoDB que suas rotas poderão usar para acessar o cluster MongoDB .É sempre uma boa prática validar a conexão do banco de dados de dados quando o aplicação é iniciado, para que você esteja ciente de qualquer problema com a configuração do sistema na primeira oportunidade.
Ao executar um teste
ping
, você pode ver facilmente se está conectado corretamente ao cluster com o qual deseja trabalhar!Por padrão, cada documento contém um ObjectId, que é um tipo exclusivo do BSON. Isso significa que eles não podem ser convertidos diretamente em JSON, então precisamos de uma solução alternativa, como codificá-los como uma string.
1 from bson import json_util 2 json_util.dumps(object_with_objectid)
1 from flask import Flask, Response 2 from bson import json_util 3 from typing import Mapping, Any 4 5 from dotenv import load_dotenv 6 from pymongo import MongoClient 7 8 load_dotenv() 9 10 app = Flask(__name__) 11 app.config.from_prefixed_env("MYAPP") 12 13 def init_mongodb_client(app: Flask): 14 client = MongoClient(app.config [connection_string]) 15 app.db = client.get_database() 16 17 init_mongodb_client(app) 18 19 20 def bson_to_json(bson: Mapping[str, Any]) -> Response: 21 return Response( 22 json_util.dumps(bson), 23 content_type="application/json", 24 ) 25 26 27 @app.get("/") 28 def index(): 29 return bson_to_json(app.db.find_one())
Este código manipulará seus ObjectIds e os converterá em um formato de string que é mais fácil de usar e lidar em seu projeto. Lembre-se de que o BSON contém outros tipos que não podem ser convertidos diretamente em JSON. Talvez você também queira considerá-los ao escrever seu aplicação Frask.
Quando você está usando o MongoDB, de modo geral, é crucial modelar seus dados corretamente para que eles sejam o mais eficiente possível ao usar várias operações. Para saber mais sobre isso, confira nosso cursoPadrões avançados de design de esquemas, disponível na MongoDB University, ou nossa sérieConstruindo com padrões.
Esperemos que estas dicas e truques sejam úteis para usar o Flusk com o MongoDB. Por meio deste artigo, você aprenderá uma variedade de práticas recomendadas que o definirão para o sucesso ao integrar o MongoDB Atlas ao seu cluster e criar alguns aplicativos fantásticos.
Perguntas? Quer compartilhar o que você está construindo?Em seguida, acesse a Comunidade de desenvolvedores doMongoDB Developer Community!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.