BLOGAnnounced at MongoDB.local NYC 2024: A recap of all announcements and updates — Learn more >

MongoDB와 Python을 함께 사용하는 방법

Atlas를 사용하여 따라해 보기
지금 무료로 연결하세요

데이터 사이언스를 위한 최적의 프로그래밍 언어 Python과 유연하고 동적인 스키마를 지원하는 MongoDB는 최첨단 웹 애플리케이션, JSON API와 데이터 프로세서 등을 구축하기 위한 환상의 조합입니다. MongoDB는 네이티브 Python 드라이버를 지원하며, 전담 엔지니어 팀이 MongoDB와 Python이 문제없이 함께 작동하도록 합니다.

목차
Python이란?

Python은 오늘날 동적 타입 언어 중에서 가장 다재다능한 언어로, 일반적인 데이터 조작 및 처리 작업을 포괄적으로 지원하여 데이터 과학과 웹 개발에 가장 적합한 프로그래밍 언어 중 하나입니다. Python의 네이티브 딕셔너리와 리스트 데이터 타입은 JSON 문서 조작에서 JavaScript에 이어 2위를 차지하며 BSON 작업에도 알맞습니다. Python용 표준 MongoDB 드라이버 라이브러리인 PyMongo는 사용하기 쉽고 데이터베이스, 컬렉션, 문서에 액세스하기 위한 직관적인 API를 제공합니다.

PyMongo를 통해 MongoDB에서 가져온 객체는 딕셔너리 및 리스트와 호환되므로 쉽게 조작하고 반복하며 출력할 수 있습니다.

MongoDB가 데이터를 저장하는 방법

MongoDB는 JSON과 유사한 문서에 데이터를 저장합니다.

Python 딕셔너리는 다음과 같습니다.

시작하는 방법과 이 강력한 조합의 잠재력을 실현하는 방법에 대한 개요를 계속 읽어보세요.

전제 조건

기기에 Python을 다운로드하고 설치해야 합니다. 설치가 올바른지 확인하려면 명령줄 터미널에 python --version을 입력하세요. 다음과 같은 내용이 표시됩니다.

Python을 처음 접해보더라도 이 튜토리얼의 Python MongoDB 예를 따르면 됩니다.

이 튜토리얼을 위해 MongoDB Atlas 프리 티어 cluster를 설정할 것을 권장합니다.
프리 티어 클러스터 실행
Atlas 자세히 알아보기
Python과 MongoDB Atlas 연결하기

PyMongo에는 Python MongoDB 상호 작용을 위한 패키지 세트가 있습니다. 다음 튜토리얼을 위해 가상 환경을 생성하고 활성화하는 것으로 시작하세요.

이제 가상 환경에 들어왔으니 PyMongo를 설치할 수 있습니다. 터미널에서 다음과 같이 입력합니다.

이제 import 문을 사용하여 코드에서 PyMongo를 Python MongoDB 라이브러리로 사용할 수 있습니다.

Python에서 MongoDB 데이터베이스 생성하기

Python을 Atlas에 연결하는 첫 단계는 cluster를 생성하는 것입니다. 문서의 지침을 따라 cluster를 생성하고 설정하는 방법을 알아보십시오.

다음으로 PyMongo 코드를 작성하기 위해 아무 폴더에나 pymongo_get_database.py라는 이름의 파일을 생성합니다. Visual Studio Code 등 원하는 텍스트 편집기를 사용할 수 있습니다.

다음을 추가하여 mongodb 클라이언트를 생성합니다.

MongoClient를 생성하려면 데이터베이스로의 연결 스트링이 필요합니다. Atlas를 사용하는 경우 문서의 단계를 따라 연결 스트링을 가져오십시오. connection_string을 사용하여 mongoclient를 생성하고 MongoDB 데이터베이스 연결을 가져옵니다. 사용자 이름, 비밀번호와 cluster 이름을 변경합니다.

이 python mongodb 튜토리얼에서는 쇼핑 목록을 생성하고 품목을 몇 가지 추가하겠습니다. 이를 위해 user_shopping_list 데이터베이스를 생성했습니다.

MongoDB는 collection과 문서가 없으면 데이터베이스를 생성하지 않습니다. 그러므로 다음으로 collection을 생성하겠습니다.

Python에서 collection 생성하기

collection을 생성하려면 collection 이름을 데이터베이스로 전달합니다. pymongo_test_insert.py라는 이름의 새 파일에 다음 코드를 추가합니다.

그러면 user_shopping_list 데이터베이스에 user_1_items라는 이름의 collection이 생성됩니다.

Python에서 문서 삽입하기

한 번에 여러 개의 문서를 삽입하려면 pymongo insert_many() 메서드를 사용하십시오.

_id 필드를 지정하지 않고 세 번째 문서를 삽입하겠습니다. 이번에는 ‘date’ 데이터 유형의 필드를 추가합니다. PyMongo를 사용하여 날짜를 추가하려면 Python dateutil 패키지를 사용하십시오.

먼저 다음 명령을 사용하여 패키지를 설치하십시오.

pymongo_test_insert.py에 다음을 추가하십시오.

문서를 하나만 삽입하려면 insert_one() 메서드를 사용합니다.

명령줄을 열고 pymongo_test_insert.py를 저장해 둔 폴더로 이동합니다.

명령을 사용하여 파일을 실행합니다.

MongoDB Atlas UI를 연결하고 지금까지 수행한 내용을 확인해 보겠습니다.

Atlas 클러스터에 로그인하고 collection 버튼을 클릭합니다.

왼쪽에 생성한 데이터베이스와 collection 이름이 표시됩니다. collection 이름을 클릭하면 데이터도 확인할 수 있습니다.

데이터베이스 및 컬렉션 이름의 보기
클릭 시 데이터의 보기

_id 필드는 기본적으로 ObjectId 유형입니다. _id 필드를 지정하지 않으면 MongoDB는 동일한 유형의 필드를 생성합니다. 한 문서에 포함된 필드가 다른 문서에 모두 있는 것은 아닙니다. 하지만 MongoDB는 데이터 입력을 막지 않습니다. 이것이 바로 스키마리스 데이터베이스의 정수입니다.

item_3를 다시 삽입하면 MongoDB가 새로운 _id 값을 지닌 새 문서를 삽입합니다. 그러나 처음 두 번의 삽입은 고유한 식별자인 _id 필드 때문에 오류를 반환합니다.

Python에서 쿼리하기

find()를 사용하여 모든 문서를 보겠습니다. 이를 위해 별도의 pymongo_test_query.py 파일을 생성하겠습니다.

명령줄을 열고 pymongo_test_query.py를 저장해 둔 폴더로 이동합니다. 다음 명령을 사용하여 파일을 실행합니다.

사전 객체의 목록을 출력으로 받게 됩니다.

사전 목록

데이터를 확인할 수 있으나, 형식이 다소 불편합니다. 그러므로 print 행을 다음으로 대체하여 항목 이름과 카테고리를 프린트하겠습니다.

MongoDB가 전체 데이터를 수신했으나, 세 번째 문서에 대해 Python 'KeyError'가 발생합니다.

Python KeyError

Python에서 누락된 데이터 오류를 처리하려면 pandas.DataFrames를 사용하십시오. 데이터프레임은 데이터 처리 작업에 사용되는 2D 데이터 구조입니다. Pymongo find() 메서드는 코드 한 줄의 데이터프레임으로 변환할 수 있는 사전 객체를 반환합니다.

pandas 라이브러리를 다음으로 설치합니다.

이제 다음 행을 파일 최상단에 추가하여 pandas 라이브러리를 가져옵니다.

그리고 루프의 코드를 다음으로 교체하여 한 단계로 KeyError를 처리합니다.

오류가 누락된 값에 대해 NaN과 NaT로 대체되었습니다.

누락된 값의 NaN과 NaT.
Python MongoDB의 인덱싱

실제 데이터베이스의 문서 및 collection 수는 항상 계속해서 증가합니다. 매우 큰 collection에서 특정 문서(예시: 재료에 "다목적 밀가루"가 포함된 문서)를 검색하려면 매우 오랜 시간이 걸릴 수 있습니다. 인덱스를 사용하면 데이터베이스 검색이 더 빠르고 효율적으로 이루어지며 정렬, 카운트, 일치 등의 작업에서 쿼리 비용을 절감할 수 있습니다.

MongoDB의 인덱스 정의는 collection 수준에서 이루어집니다.

보다 적합한 인덱스를 만들려면 collection에 문서를 더 많이 추가하십시오. insertmany() 메서드를 사용하여 한 번에 많은 문서를 삽입할 수 있습니다. 샘플 문서의 경우, github에서 코드를 복사하여 터미널에서 python pymongo\test_insert_more_items.py을 실행합니다.

'음식' 카테고리에 속하는 항목을 원한다고 가정해 보겠습니다.

위의 쿼리를 실행하려면 MongoDB가 모든 문서를 스캔해야 합니다. 이를 확인하려면 Compass를 다운로드하십시오. 연결 문자열을 사용하여 cluster와 연결합니다. Collection을 열고 계획 설명 탭으로 이동합니다. ‘필터’에 위의 기준을 입력하고 결과를 확인합니다.

인덱스 없는 쿼리 결과

보시다시피 쿼리는 14개의 문서를 스캔하여 5개의 결과를 얻습니다.

'category' 필드에 하나의 인덱스를 만들어 보겠습니다. pymongo_index.py라는 새 파일에 다음 코드를 추가합니다.

Compass UI에서 동일한 필터를 다시 설명합니다.

인덱스 있는 쿼리 결과

이번에는 카테고리 인덱스 때문에 문서 5개만 스캔합니다. 문서 수가 적어서 실행 시간에는 큰 차이가 없습니다. 하지만 쿼리를 위해 스캔하는 문서의 수가 크게 줄어든 것을 확인할 수 있습니다. 인덱스는 집계의 성능 최적화에도 도움이 됩니다. 집계는 이 튜토리얼 내용에 포함되지 않지만, 참조하실 수 있는 개요가 있습니다.

결론

이 Python MongoDB 튜토리얼에서는 PyMongo의 기본 사항을 배우고 간단한 데이터베이스 작업을 수행했습니다. 다음 단계로 비즈니스 데이터와 함께 PyMongo를 사용하여 CRUD 작업 수행하기를 살펴보십시오. 이 튜토리얼을 따르지 않으셨다면, 지금 바로 MongoDB Atlas 무료 설치를 시작하십시오. MongoDB University에서도 해당 주제에 대한 강좌를 수강할 수 있습니다.

시작할 준비가 되셨습니까?

새로운 cluster를 실행하거나 중단 시간 없이 MongoDB Atlas로 마이그레이션하고 지금 Python에 연결하십시오.
지금 체험하기

FAQ

MongoDB를 Python에 어떻게 연결하나요?

MongoDB를 Python에 연결하는 방법에는 세 가지가 있습니다.

  • PyMongo
    • MongoDB와 Python을 연결하기 위한 네이티브 드라이버입니다. PyMongo에는 Python 코드에서 데이터베이스 작업을 수행할 수 있는 모든 라이브러리가 있습니다. PyMongo는 저수준 드라이버이기 때문에 빠르고 직관적이며 더 많은 제어 기능을 제공합니다.
  • MongoEngine
    • MongoEngine은 Document Object Mapper입니다. 애플리케이션 객체와 문서 데이터를 매핑하는 스키마를 정의할 수 있습니다.
  • Djongo
    • Django 프레임워크를 사용하는 Python 웹 애플리케이션에 Djongo를 사용합니다. 기존 SQL 쿼리를 MongoDB 쿼리 문서로 변환합니다.

MongoEngine 및 Djongo 사용에 대해 자세히 알아보기.

Python에 가장 적합한 데이터베이스는 무엇인가요?

Python은 다양한 데이터베이스와 잘 작동합니다. 선택은 프로젝트 요구 사항에 따라 달라집니다. MongoDB는 유연한 스키마와 Python 네이티브 객체에 밀접하게 매핑되는 방식으로 인해 Python 애플리케이션에 매우 적합한 선택입니다. 이러한 특성으로 인해 Python과 MongoDB는 웹 개발 작업을 위한 훌륭한 선택입니다.

자세한 내용은 NoSQL 데이터베이스 및 SQL 데이터베이스 비교를 참조하세요. 일부 네이티브 Python 데이터베이스도 있지만 대중적이지 않고 기능이 매우 제한적입니다.

MongoDB는 Python에 적합한가요?

MongoDB 는 유연하고 스키마가 없는 JSON과 유사한 문서에 데이터를 저장합니다. Python에는 JSON 및 BSON 데이터 형식을 직접 처리하는 풍부한 라이브러리가 있습니다. Python은 PyMongo, MongoEngine 등과 같은 드라이버를 통해 MongoDB와 잘 통합됩니다.

이는 데이터베이스 스키마의 경직성을 제거함으로써 MongoDB를 Python에 적합하게 만듭니다.

Python은 MongoDB에 데이터를 어떻게 저장하나요?

Python은 PyMongo 및 MongoEngine과 같은 라이브러리를 통해 MongoDB에 데이터를 저장합니다. Django 프레임워크를 사용하는 웹 애플리케이션의 경우 Djongo를 사용할 수 있습니다.

  • PyMongo: PyMongo는 MongoDB 데이터베이스용 네이티브 Python 드라이버입니다. 저수준의 드라이버이기 때문에 더 빠르며 Python과 MongoDB를 연결하는 데 선호되는 방법이기도 합니다.
  • MongoEngine: MongoEngine을 사용하면 스키마가 없는 데이터베이스에 대해서도 스키마를 생성할 수 있습니다. MongoEngine은 ODM 접근 방식을 따라 애플리케이션 클래스와 데이터베이스 문서를 매핑합니다.
  • Django: Django는 SQL 트랜스파일러입니다. 코드를 크게 변경하지 않고도 기존 SQL 프로젝트를 MongoDB로 마이그레이션할 수 있습니다.

MongoEngine 및 Djongo 사용에 대해 자세히 알아보기.

Python에서 MongoDB를 어떻게 사용하나요?
PyMongo를 사용하여 MongoDB를 Python과 연결할 수 있습니다. PyMongo는 MongoDB용 네이티브 Python 드라이버입니다. MongoShell과 유사한 구문을 사용하므로 쉽게 상관 관계를 파악하고 올바른 메서드를 사용할 수 있습니다. 예를 들어 MongoShell의 insertMany()는 PyMongo의 insert_many()에 해당합니다. MongoEngine과 Django를 사용하여 Python과 MongoDB를 연결할 수도 있습니다. 그러나 선호되는 접근 방식은 PyMongo를 사용하는 것입니다. PyMongo는 더 빠르고 더 많은 제어 기능을 제공하는 저수준 드라이버이기 때문입니다. PyMongo에 대해 자세히 알아보려면 PyMongo 문서를 확인하세요.
Python을 사용하여 MongoDB에서 데이터를 어떻게 가져오나요?

Python에서 MongoDB에 연결하는 가장 효율적이고 쉬운 방법은 PyMongo를 사용하는 것입니다. PyMongo는 MongoDB용 네이티브 Python 드라이버입니다. 연결하려면 connection_string을 인수로 사용하여 pymongo.MongoClient() 명령을 사용합니다. 그런 다음 find() 메서드를 사용하여 필요한 문서를 가져올 수 있습니다. 예시:

import pymongo

# Python에서 PyMongo를 사용하여 MongoDB에 연결합니다.
client = pymongo.MongoClient(CONNECTION_STRING)
# 데이터베이스를 엽니다.
dbname = client['user_shopping_list']
# collection을 가져옵니다.
collection_name = dbname["item_details"]
# collection에서 데이터를 가져옵니다.
item_details = collection_name.find()import pymongo

# PyMongo를 사용하여 Python에서 MongoDB에 연결합니다.
client = pymongo.MongoClient(CONNECTION_STRING)
# 데이터베이스를 엽니다.
dbname = client['user_shopping_list']
# collection을 가져옵니다.
collection_name = dbname["item_details"]
# collection에서 데이터를 가져옵니다.
item_details = collection_name.find()
Python을 사용하여 MongoDB에 데이터를 어떻게 삽입하나요?

데이터를 삽입하려면 PyMongo를 사용하여 MongoDB와 Python을 연결합니다. PyMongo는 MongoDB용 네이티브 Python 드라이버입니다. 연결이 완료되면 insert_one()insert_many()와 같은 PyMongo의 메서드를 사용할 수 있습니다. 예시:

# mongoclient를 가져옵니다.
client = pymongo.MongoClient(CONNECTION_STRING)

# 데이터베이스를 가져오거나 생성합니다.
dbname = client['user_shopping_list']

# collection을 가져오거나 생성합니다.
collection_name = dbname["item_details"]

# 문서를 생성합니다.
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# 행을 하나 삽입합니다.
collection_name.insert_one(item_1)# mongoclient를 가져옵니다.
client = pymongo.MongoClient(CONNECTION_STRING)

# 데이터베이스를 가져오거나 생성합니다.
dbname = client['user_shopping_list']

# collection을 가져오거나 생성합니다.
collection_name = dbname["item_details"]

# 문서를 생성합니다.
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# 행을 하나 삽입합니다.
collection_name.insert_one(item_1)
Python을 사용하여 MongoDB에서 데이터베이스를 생성하려면 어떻게 해야 하나요?

PyMongo 드라이버를 사용하여 Python 코드로 MongoDB 데이터베이스를 생성합니다. 예시:

import pymongo

# mongoclient를 가져옵니다.
client = pymongo.MongoClient(CONNECTION_STRING)

# 데이터베이스를 가져오거나 생성합니다.
dbname = client['user_shopping_list']import pymongo

# mongoclient를 가져옵니다.
client = pymongo.MongoClient(CONNECTION_STRING)

# 데이터베이스를 가져오거나 생성합니다.
dbname = client['user_shopping_list']
SQL 데이터베이스와 NoSQL 데이터베이스의 차이점

SQL 데이터베이스를 relational database라고 하고, NoSQL("비 SQL" 또는 "비 SQL만") 데이터베이스를 non-relational database라고도 합니다. Relational database는 수학의 '관계형 데이터 모델'을 기반으로 하기 때문에 관계형이라고 불립니다.

SQL 데이터베이스는 고정된 행과 열이 있는 테이블 형식으로 데이터를 저장합니다. NoSQL 데이터베이스는 다음과 같이 다양한 유형으로 제공됩니다.

  1. 문서 유형: JSON 문서

  2. 키-값: 키-값 쌍

  3. 와이드 컬럼: 와이드 컬럼 데이터 저장소에는 행과 동적 컬럼이 있는 테이블이 있습니다.

SQL 기반 데이터베이스의 예로는 MySQL, Microsoft SQL Server, PostgreSQL 및 SQLite가 있습니다. NoSQL 데이터베이스의 예로는 MongoDB, CouchDB, Redis, DynamoDB 등이 있습니다.

더 자세한 차이점은 SQL 및 NoSQL 비교를 참조하세요.