Visão geral
Esta página descreve algumas bibliotecas de terceiros populares para trabalhar com PyMongo. Com exceção da Motor, todas as bibliotecas nesta página são mantidas pela comunidade. Para manter a lista atualizada, os projetos que não foram atualizados recentemente serão removidos ocasionalmente da lista ou movidos para o final.
Dica
Embora essas bibliotecas possam ser úteis, recomendamos que os novos usuários do PyMongo comecem trabalhando diretamente com o driver. O PyMongo por si só atenderá às necessidades da maioria das pessoas, e trabalhar com ele é instrutivo sobre como o MongoDB funciona.
Camadas semelhantes a ORM
As camadas do tipo ORM (object-relational-mapping-like) adicionam recursos como modelos e validação ao PyMongo.
MincePy é um mapeador de documentos de objetos (ODM) projetado para tornar qualquer objeto Python armazenável e consultável em um banco de dados MongoDB . Ele foi projetado com o aprendizado de máquina e aplicativos de ciência computacional e experimental de grandes dados em mente. No entanto, é totalmente geral e pode ser útil para qualquer pessoa que queira organizar, compartilhar ou processar grandes quantidades de dados com a menor alteração possível em seu fluxo de trabalho atual.
Ming é uma biblioteca que permite impor esquemas em um banco de dados MongoDB em seu aplicação Python. Ele foi desenvolvido pelo SourceForge durante sua migração para o MongoDB. Consulte a publicação inicial do blog para obter mais detalhes.
OMongoEngine permite usar a sintaxe inspirada no Django ORM para definir esquemas para documentos e query collections. O código está disponível no GitHub.
OMotorEngine é uma porta do MongoEngine para o Motor, permitindo o acesso assíncrono com o Tornado. Ele implementa as mesmas APIs de modelagem de forma portátil de dados, o que significa que um modelo definido no MongoEngine pode ser lido no MotorEngine. A fonte está disponível no GitHub.
uMongo é um ODM Python MongoDB que foi criado para atender duas necessidades: a falta de um ODM assíncrono e a dificuldade de serializar documentos com outros ODMs. uMongo funciona com vários drivers: PyMongo, TxMongo, motor_asyncio e mongomock. A fonte está disponível no GitHub.
Ferramentas de framework
Esta seção lista ferramentas e adaptadores que foram projetados para funcionar com várias estruturas e bibliotecas Python.
Django
Você pode usar o backend oficial do MongoDB do Django para usar o MongoDB como seu banco de dados nos aplicativos Django. O Django MongoDB Backend é um backend de banco de dados Django que usa o PyMongo para se conectar ao MongoDB. Ao usar o backend, você pode usar modelos Django para representar documentos MongoDB , com suporte para formulários, validações e autenticação Django. O Django MongoDB Backend também permite que você use otimizações de query específicas do MongoDB em seus aplicativos, como operações de agregação e índices.
Importante
Visualização pública
O Django MongoDB Backend está em pré-visualização pública e destinado apenas para fins de avaliação. A visualização pública não é recomendada para sistemas de produção, pois alterações significativas podem ser introduzidas. Para saber mais, consulte Visualizar recursos.
Flask
ASpark-MongoAlchemy adiciona suporte ao MongoDB para o MongoDB com o MongoAlchemy.
MongoKit é uma extensão do MongoKit para melhor integrar o MongoKit ao MongoKit.
Outras ferramentas
O Gerador de Aplicativos Full Stack FastAPI permite que você crie rapidamente um aplicação full-stack que integra FastAPI, React e MongoDB.
Log4Mongo é um manipulador de registro Python flexível que pode armazenar registros no MongoDB usando coleções normais e limitadas.
mongobox é uma ferramenta para executar uma instância do MongoDB em sandbox a partir de um aplicativo Python.
mongodb_beaker permite que você use o MongoDB como backend para o sistema de cache e sessão doBeaker. A fonte está no GitHub.
MongoLog é um manipulador de registro Python que armazena registros no MongoDB usando uma collection limitada.
role.recipe.mongodb é uma receita Buildout para baixar e instalar MongoDB.
Ferramentas de interoperabilidade
Esta seção lista ferramentas que oferecem suporte à interoperabilidade com outras ferramentas.
gevent
O PyMongo usa funções de thread e soquete da biblioteca padrão Python. Ao usar o gevent, o PyMongo pode fazer E/S assíncrona com soquetes sem bloqueio e agendar operações em espaços verdes em vez de threads.
Para usar gevent com PyMongo, chame o método monkey.patch_all()
do gevent antes de carregar qualquer outro módulo, conforme mostrado no exemplo a seguir :
# You must call patch_all() *before* importing any other modules from gevent import monkey _ = monkey.patch_all() from pymongo import MongoClient client = MongoClient()
Importante
Feche o MongoClient para evitar o bloqueio
Se você chamar monkey.patch_all()
quando seu aplicativo for iniciado, MongoClient
usará whitelets em vez de threads para monitorar a integridade do servidor. Ao encerrar, se o seu aplicativo chamar o método ~gevent.hub.Hub.join()
sem primeiro encerrar esses verdes, a chamada para o método ~gevent.hub.Hub.join()
será bloqueada indefinidamente.
Para evitar isso, feche ou desreferenciar qualquer objeto MongoClient
ativo antes de sair do aplicativo. Em algumas estruturas de aplicativos, você pode usar um manipulador de sinal para encerrar os whitelets de background quando seu aplicativo recebe SIGHUP
, conforme mostrado no exemplo a seguir:
import signal def graceful_reload(signum, traceback): """Explicitly close some global MongoClient object.""" client.close() signal.signal(signal.SIGHUP, graceful_reload)
Esse problema afeta aplicativos que usam versões do uWSGI anteriores à 1.9.16 ou versões do uWSGI mais recentes com a -gevent-wait-for-hub
opção. Para obter mais informações, consulte o registro de alterações do uWSGI.
mod_wsgi
Para executar seu aplicativo PyMongo em mod_wsgi, siga estas diretrizes:
Use a diretiva
WSGIDaemonProcess
para executar mod_wsgi no modo daemon. Se a sua configuração do mod_wsgi incluir apenas a diretivaWSGIScriptAlias
, ela será executada no modo incorporado.Use a diretiva
WSGIApplicationGroup %{GLOBAL}
para garantir que seu aplicativo seja executado no interpretador Python principal do daemon, em vez de em um subinterpretador. Isso evita um pequeno custo incorrido ao decodificar BSON em um subinterpretador.Use a diretiva
WSGIProcessGroup
para atribuir cada aplicativo a um daemon separado. Isso garante que os aplicativos não afetem o estado uns dos outros.
A seguinte configuração mod_wsgi mostra como usar as diretivas anteriores para executar seu aplicativo PyMongo:
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi WSGIProcessGroup my_process WSGIApplicationGroup %{GLOBAL} </VirtualHost>
Se você tiver vários aplicativos PyMongo, coloque cada um em um daemon separado no grupo de aplicativos global:
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi <Location /my_app> WSGIProcessGroup my_process </Location> WSGIDaemonProcess my_other_process WSGIScriptAlias /my_other_app /path/to/other_app.wsgi <Location /my_other_app> WSGIProcessGroup my_other_process </Location> WSGIApplicationGroup %{GLOBAL} </VirtualHost>
Observação
Muitas extensões do Python C têm problemas ao executar em vários subinterpretadores do Python. Essas dificuldade são explicadas na documentação do Py_NewInterpreter e na seção Multiple Python Sub Interpreters da documentação do mod_wsgi.
Damas de tipo
Para obter uma lista de ferramentas que podem usar dicas de tipo para detectar erros em seu código, consulte Tipagem estática com Python na typing
documentação do módulo.
Observação
Os valores padrão para tipos de documento genéricos ainda não estão disponíveis no MySQL. Para uma discussão sobre as limitações do Meupy que causaram esse problema, consulte o repositório do Meupy no GitHub.
Se você estiver usando o mypy e quiser desativar os tipos fornecidos, adicione as seguintes linhas ao seu arquivo de configuração do mypy:
[mypy-pymongo] follow_imports = False
Drivers Python alternativos
Esta seção lista alternativas ao PyMongo.
OMotor é um driver MongoDB completo e sem bloqueio para aplicativos Python Tornado.
TxMongo é um driver Python torcido assíncrono para MongoDB.
MongoMock é uma pequena biblioteca para ajudar a testar o código Python. Ele usa o PyMongo para interagir com o MongoDB.
Observação
PyMongo é incompatível com PythonAnywhere
O PyMongo cria threads Python, que o PythonAnywhere não suporta.
Para obter mais informações, consulte o ticket do Jira relevante.