Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
PyMongo 드라이버

타사 통합 및 도구

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

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

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

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

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

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

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

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

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

공식 Django MongoDB 백엔드 를 사용하여 Django 애플리케이션에서 MongoDB 데이터베이스로 사용할 수 있습니다. 장고 MongoDB 백엔드는 PyMongo 사용하여 MongoDB 에 연결하는 장고 데이터베이스 백엔드 입니다. 백엔드 사용하면 Django 양식, 유효성 검사 및 인증 지원 하는 Django 모델을 사용하여 MongoDB 문서를 표현할 수 있습니다. 또한 Django MongoDB 백엔드를 사용하면 애플리케이션에서 집계 작업 및 인덱스와 같은 MongoDB 전용 쿼리 최적화를 사용할 수 있습니다.

중요

공개 미리보기

장고 MongoDB 백엔드는 공개 미리 보기로 제공되며 평가 목적으로만 사용됩니다. 공개 미리 보기는 호환성이 손상되는 변경이 발생할 수 있으므로 프로덕션 배포에는 권장되지 않습니다.

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

PyMongo Python 표준 라이브러리의 스레드 및 소켓 함수를 사용합니다. PyMongo gevent를 사용하여 비차단 소켓으로 비동기 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)

이 문제는 이전 버전의 uWSGI 1.9.16 또는 옵션이 있는 최신 uWSGI 버전을 사용하는 애플리케이션에 영향을 -gevent-wait-for-hub 미칩니다. 자세한 내용은 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 문서 및 mod_wsgi 문서의 다중 Python 하위 인터프리터 섹션에 설명되어 있습니다.

유형 힌트를 사용하여 코드의 오류를 감지할 수 있는 도구 typing 목록은 모듈 문서에서 Python 사용한 정적 입력을 참조하세요.

참고

일반 문서 유형의 기본값 은 아직 Mypy에서 사용할 수 없습니다. 이 문제를 일으킨 Mypy 제한 사항에 대한 설명은 Mypy GitHub 리포지토리 참조하세요.

Mypy를 사용 중이고 제공된 유형을 사용하지 않도록 옵트아웃하려면 Mypy 구성 파일 에 다음 줄을 추가하세요.

[mypy-pymongo]
follow_imports = False

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

  • 모터 는 Python Tornado 애플리케이션을 위한 모든 기능을 갖춘 비차단 MongoDB 운전자 입니다.

  • TxMongo는 MongoDB 용 비동기 Twisted Python 운전자 입니다.

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

참고

PyMongo 는 PythonAnywhere와 호환되지 않습니다.

PyMongo PythonAnywhere가 지원 하지 않는 Python 스레드를 생성합니다.

자세한 내용은 관련 Jira 티켓 참조하세요.

돌아가기

TLS

이 페이지의 내용