Página inicial do Docs → Desenvolver aplicações → Drivers Python → PyMongo
Ferramentas de terceiros
Nesta página
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 Python objeto armazenável e consultável em um MongoDB database banco de . 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 MongoDB database em seu Python aplicativo . Foi desenvolvido por SourceForge no curso de sua migração para o MongoDB. Consulte a publicação do blog de introdução para obter mais detalhes.
MongoEngine permite usar a sintaxe inspirada no ORM do Django para definir esquemas para documentos e collections de query. O código está disponível no Github.
MotorEngine é 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
Mesmo sem um backend do Django, você pode usar o MongoDB e o PyMongo com a maior parte do que o Django oferece. Alguns recursos do Django que exigem django.db
, como administrador, autenticação e sessões, não funcionarão ao usar apenas o MongoDB.
Mecanismo Django MongoDB é um MongoDB database backend de para Django que oferece suporte a agregações Django, atualizações atômicas, objetos embarcados, Map/Reduce e GridFS. Ele permite que você use a maioria das funcionalidades integradas do Django, incluindo ORM, admin, autenticação, frameworks de site e sessão e cache. Para obter mais informações, consulte o tutorial do Mecanismo Django MongoDB.
Django MongoEngine é um backend MongoDB para Django. O repositório também inclui um aplicativo de exemplo. Para obter mais informações, consulte a documentação do Django MongoEngine.
Djogo é um connector para usar o Django com o MongoDB como backend do banco de dados. Com o Djogo, você pode usar a interface de administração do Django para adicionar e modificar documentos no MongoDB. O código fonte do Djogo está hospedado no Github, e o pacote Djogo está no PyPI.
Mango fornece backends do MongoDB para sessões e autenticação
django.db
do Django (ignorando totalmente).
Flask
Sparkle-MongoAlchemy adiciona suporte ao MongoDB para o MongoDB com o MongoAlchemy.
Sparkle-MongoKit é uma extensão para o MongoKit para melhor integrar o MongoKit ao MongoKit.
Sparkle-PyMongo conecta Pipeline e PyMongo.
Outras ferramentas
Log4mongo é um Python manipulador de registro flexível que pode armazenar registros no MongoDB usando collections 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 as APIs do Béaker sistema de cache e sessão. A fonte está no Github.
MongoLog é um manipulador de registro Python que armazena registros no MongoDB usando uma coleção limitada.
role.recipe.mongodb é um Buildout receita para baixar e instalar o 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 sgevent, 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 o gevent com o 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 opção -gevent-wait-for-hub
. Para obter mais informações, consulte o registro de alterações do uWSGI.
mod_wsgi
O mod_wsgi O pacote fornece um módulo Apache que implementa uma interface compatível com WSGI para hospedar aplicativos web baseados em Python no servidor web Apache.
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 de Py_NewInterpreter e nos vários sub-interpretadores do Python seção da documentação do mod_wsgi.
Drivers Python alternativos
Esta seção lista alternativas ao PyMongo.