Docs Menu

Docs Home애플리케이션 개발Python 드라이버PyMongo

타사 도구

이 페이지의 내용

  • 개요
  • ORM과 유사한 계층
  • 프레임워크 도구
  • Django
  • Flask
  • 기타 도구
  • 상호 운용성 도구
  • gevent
  • mod_wsgi
  • 대체 Python 드라이버

이 페이지에서는 PyMongo 작업에 널리 사용되는 타사 라이브러리에 대해 설명합니다. Motor 를 제외하고 이 페이지의 모든 라이브러리는 커뮤니티에서 유지 관리합니다. 이 목록을 최신 상태로 유지하기 위해 최근에 업데이트되지 않은 프로젝트가 목록에서 제거되거나 맨 끝으로 이동되는 경우가 있습니다.

이러한 라이브러리가 도움이 될 수 있지만, 새로운 PyMongo 사용자는 드라이버로 직접 작업하는 것으로 시작하는 것이 좋습니다. PyMongo만으로도 대부분의 사람들의 요구 사항을 충족할 수 있으며, PyMongo로 작업하는 것은 MongoDB의 작동 방식에 도움이 됩니다.

ORM과 유사한(object-relational-mapping-like) 계층은 PyMongo에 모델 및 유효성 검사와 같은 기능을 추가합니다.

  • MincePy 모든 Python 객체를 에 저장하고 쿼리할 수 있도록 설계된 객체-문서 매퍼(ODM)입니다.MongoDB database 머신 러닝과 빅데이터 계산 및 실험 과학 애플리케이션을 염두에 두고 설계되었습니다. 그러나 이는 전적으로 일반적인 사항이므로 현재 워크플로를 최대한 변경하지 않고 대량의 데이터를 구성, 공유 또는 처리하려는 모든 사람에게 유용할 수 있습니다.

  • Ming 애플리케이션의 에 스키마를 적용할 수 있는 MongoDB database Python 라이브러리입니다. SourceForge 에서 개발했습니다. MongoDB로 마이그레이션하는 과정에서 소개 블로그 게시물 참조 를 참조하세요.

  • MongoEngine 를 사용하면 Django ORM에서 영감을 받은 구문을 사용하여 문서 및 쿼리 컬렉션에 대한 스키마를 정의할 수 있습니다. 이 코드는 에서 확인할 수 Github 있습니다.

  • MotorEngine 는 MongoEngine을 로 포트하여 Motor Tornado와의 비동기 액세스를 허용합니다. 동일한 모델링 API를 데이터 이동식으로 구현하므로 MongoEngine에서 정의된 모델을 MotorEngine에서 읽을 수 있습니다. 소스는 에서 확인할 수 Github 있습니다.

  • uMongo Python MongoDB ODM은 비동기 ODM의 부족과 다른 ODM과의 문서 직렬화의 어려움이라는 두 가지 요구 사항을 충족하기 위해 개발되었습니다. uMongo는 PyMongo, TxMongo, 모터_asyncio 및 mongomock과 같은 여러 드라이버와 함께 작동합니다. 소스는 에서 확인할 수 Github 있습니다.

이 섹션에는 다양한 Python 프레임워크 및 라이브러리에서 작동하도록 설계된 도구 및 어댑터가 나열되어 있습니다.

Django 백엔드가 없어도 Django가 제공하는 대부분의 기능과 함께 MongoDB와 PyMongo를 사용할 수 있습니다. 관리자, 인증 및 세션과 같이 django.db 가 필요한 장고의 특정 기능은 MongoDB만 사용할 때 작동하지 않습니다.

  • 장고 MongoDB 엔진 MongoDB database 장고 애그리게이션, 원자 업데이트, 내장된 객체, 맵/리듀스 및 GridFS를 지원하는 장고용 백엔드입니다. 이를 통해 ORM, 관리, 인증, 사이트 및 세션 프레임워크, 캐싱을 포함한 장고에 내장된 대부분의 기능을 사용할 수 있습니다. 자세한 내용은 Django MongoDB Engine 튜토리얼을 참조하세요.

  • Django MongoEngine 장고를 위한 MongoDB 백엔드입니다. 리포지토리에는 예제 애플리케이션 도 포함되어 있습니다.. 자세한 내용은 Django MongoEngine 설명서를 참조하세요.

  • Djongo 데이터베이스 백엔드로 와 connector 함께 Django를 사용하기 위한 MongoDB 입니다. Djongo를 사용하면 Django Admin GUI를 사용하여 MongoDB에서 문서를 추가하고 수정할 수 있습니다. Djongo 소스 코드 은(는) 에서 Github 호스팅되며 D종고 패키지 는 PyPI에 있습니다.

  • 망고 장고 세션 및 인증을 위한 MongoDB 백엔드를 제공합니다(django.db 완전히 우회).

  • Flask-MongoAlchemy MongoAlchemy를 사용하여 MongoDB에 대한 Flask 지원을 추가합니다.

  • Flask-MongoKit MongoKit을 Flask에 더 잘 통합할 수 있는 확장 기능입니다.

  • Flask-PyMongo Flask와 PyMongo를 연결합니다.

  • Log4mongo 일반 Python MongoDB 및 고정 사이즈 컬렉션을 사용하여 에 로그를 저장할 수 있는 유연한 로깅 핸들러입니다.

  • mongobox Python 앱 내에서 샌드박스 MongoDB 인스턴스를 실행하는 도구입니다.

  • mongodb_beker MongoDB를 비커의 백엔드로 사용할 수 있습니다. 캐싱 및 세션 시스템. 소스는 에 Github 있습니다.

  • MongoLog 고정 사이즈 컬렉션을 사용하여 MongoDB에 로그를 저장하는 Python 로깅 핸들러입니다.

  • load.recipe.mongodb 빌드아웃 입니다. MongoDB 다운로드 및 설치를 위한 레시피입니다.

이 섹션에는 다른 도구와의 상호 운용성을 지원하는 도구가 나열되어 있습니다.

PyMongo는 Python 표준 라이브러리의 스레드 및 소켓 함수를 사용합니다. gevent 를 사용하여 , PyMongo 는 비블로킹 소켓을 사용하여 비동기 I/O를 수행하고 그린렛에서 작업을 예약할 수 있습니다. 스레드 대신.

PyMongo와 함께 gevent를 사용하려면 다음 예제와 같이 다른 모듈을 로드 하기 전에 gevent의 monkey.patch_all() 메서드를 호출합니다.

# You must call patch_all() *before* importing any other modules
from gevent import monkey
_ = monkey.patch_all()
from pymongo import MongoClient
client = MongoClient()

중요

차단을 방지하기 위해 MongoClient 닫기

애플리케이션이 실행될 때 monkey.patch_all() 를 호출하면 MongoClient 는 스레드 대신 그린렛을 사용하여 서버 상태를 모니터링합니다. 종료할 때 애플리케이션이 이러한 그린렛을 먼저 종료하지 않고 ~gevent.hub.Hub.join() 메서드를 호출하면 ~gevent.hub.Hub.join() 메서드 호출이 무기한 차단됩니다.

이를 방지하려면 애플리케이션을 종료하기 전에 활성 MongoClient 객체를 닫거나 역참조하세요. 일부 애플리케이션 프레임워크에서는 다음 예제와 같이 애플리케이션이 SIGHUP 수신할 때 신호 핸들러를 사용하여 백그라운드 그린렛을 종료할 수 있습니다.

import signal
def graceful_reload(signum, traceback):
"""Explicitly close some global MongoClient object."""
client.close()
signal.signal(signal.SIGHUP, graceful_reload)

이 문제는 1.9.16 이전 버전의 uWSGI 또는 -gevent-wait-for-hub 옵션이 있는 최신 uWSGI 버전을 사용하는 애플리케이션에 영향을 미칩니다. 자세한 내용은 uWSGI 변경 로그를 참조하세요.

mod_wsgi 패키지는 Apache 웹 서버 위에 Python 기반 웹 애플리케이션을 호스팅하기 위한 WSGI 호환 인터페이스를 구현하는 Apache 모듈을 제공합니다.

mod_wsgi에서 PyMongo 애플리케이션을 실행하려면 다음 가이드라인을 따르세요.

  • WSGIDaemonProcess 지시문을 사용하여 데몬 모드에서 mod_wsgi를 실행합니다. mod_wsgi 구성에 WSGIScriptAlias 지시문만 포함된 경우 임베디드 모드에서 실행됩니다.

  • WSGIApplicationGroup %{GLOBAL} 지시문을 사용하여 애플리케이션이 하위 인터프리터가 아닌 데몬의 기본 Python 인터프리터에서 실행되도록 합니다. 이렇게 하면 하위 인터프리터에서 BSON을 디코딩할 때 발생하는 약간의 비용을 피할 수 있습니다.

  • WSGIProcessGroup 지시문을 사용하여 각 애플리케이션을 별도의 데몬에 할당합니다. 이렇게 하면 애플리케이션이 서로의 상태에 영향을 주지 않습니다.

다음 mod_wsgi 구성은 앞의 지시문을 사용하여 PyMongo 애플리케이션을 실행하는 방법을 보여줍니다.

<VirtualHost *>
WSGIDaemonProcess my_process
WSGIScriptAlias /my_app /path/to/app.wsgi
WSGIProcessGroup my_process
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>

여러 PyMongo 애플리케이션이 있는 경우 글로벌 애플리케이션 그룹의 별도 데몬에 각각 배치합니다.

<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>

참고

많은 Python C 확장은 여러 Python 하위 인터프리터에서 실행할 때 문제가 있습니다. 이러한 어려움은 Py_NewInterpreter 설명서에 설명되어 있습니다. 및 다중 Python 하위 인터프리터 에서 섹션을 참조하세요.

이 섹션에는 PyMongo의 대안이 나열되어 있습니다.

  • TornadoMotor 애플리케이션을 위한 모든 기능을 갖춘 비차단 MongoDB 드라이버입니다.Python

  • TxMongo MongoDB용 비동기 Twisted Python 드라이버입니다.

  • MongoMock Python 코드를 테스트하는 데 도움이 되는 작은 라이브러리입니다. PyMongo를 사용하여 MongoDB와 상호 작용합니다.

← 범용 고유 ID(UUID)