Python을 사용하여 MongoDB 데이터베이스에 로컬로 연결

Tahseen Tauseef 2023년10월10일
  1. MongoDB에 데이터 저장
  2. Python을 사용하여 MongoDB 데이터베이스에 로컬로 연결
  3. Python에서 컬렉션 만들기
  4. Python에 문서 삽입
  5. Python의 쿼리
  6. Python 및 MongoDB의 인덱스
Python을 사용하여 MongoDB 데이터베이스에 로컬로 연결

Python은 데이터 과학을 위한 가장 널리 사용되는 프로그래밍 언어이며, 유연하고 동적인 스키마를 갖춘 MongoDB는 몇 가지 예를 들자면 최신 웹 애플리케이션, JSON API 및 데이터 프로세서를 만들기 위한 훌륭한 조합입니다.

MongoDB에는 네이티브 Python 드라이버와 MongoDB와 Python이 원활하게 함께 작동하도록 노력하는 엔지니어 팀도 포함되어 있습니다.

Python은 일반적인 데이터 조작 및 처리 작업을 광범위하게 지원합니다. 예를 들어 Python의 기본 사전 및 목록 데이터 구조는 JSON 문서를 처리할 때 JavaScript 다음으로 배치하므로 BSON 작업에 이상적입니다.

공식 Python MongoDB 드라이버 라이브러리인 PyMongo는 유사하게 간단하며 데이터베이스, 컬렉션 및 문서에 액세스하기 위한 직관적인 API를 제공합니다.

PyMongo를 사용하여 MongoDB에서 가져온 객체는 사전 및 목록과 호환되므로 간단한 조작, 반복 및 인쇄가 가능합니다.

MongoDB에 데이터 저장

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

# Mongodb document (JSON-style)
document_1 = {
    "_id": "BF00001CFOOD",
    "item_name": "Bread",
    "quantity": 2,
    "ingredients": "all-purpose flour",
}

Python 사전은 다음과 같습니다.

# python dictionary
dict_1 = {
    "item_name": "blender",
    "max_discount": "10%",
    "batch_number": "RR450020FRG",
    "price": 440,
}

Python의 전제 조건 및 설치

머신에 Python을 다운로드하고 설치합니다. 명령줄 창에 python을 입력하여 설치가 올바른지 확인하십시오.

다음을 받아야 합니다.

Python 3.9.1 (tags/v3.9.1:9cf6752, Feb  5 2021, 10:34:40) [MSC v.1927 64 bit (AMD64)] on win32
>>>

Python을 처음 사용하는 경우 이 단원의 Python MongoDB 예제를 따를 수 있습니다.

Python을 사용하여 MongoDB 데이터베이스에 로컬로 연결

PyMongo는 Python에서 MongoDB를 사용하기 위한 라이브러리 모음을 제공합니다. PyMongo를 시작하고 실행하려면 명령 프롬프트를 열고 다음을 입력하십시오.

python -m pip install pymongo

이 Python MongoDB 자습서에서는 MongoDB SRV URI를 사용합니다. 이제 dnspython을 설치해 보겠습니다.

python -m pip install dnspython

이제 import 문을 사용하여 코드에서 PyMongo를 Python MongoDB 라이브러리로 사용할 수 있습니다. 그러나 먼저 Python으로 MongoDB 데이터베이스를 만듭니다.

따라서 Python을 연결하는 첫 번째 단계는 MongoDB 클러스터 설정입니다.

다음으로 하위 디렉토리의 pymongo test insert.py 파일에 PyMongo 코드를 작성합니다. 텍스트 패드/메모장과 같은 간단한 텍스트 편집기이면 충분합니다.

MongoDB 클라이언트에 다음 줄을 추가합니다.

def get_database():
    from pymongo import MongoClient
    import pymongo

    # Provide the mongodb url to connect python to mongodb using pymongo
    CONNECTION_STRING = (
        "mongodb+srv://<username>:<password>@<cluster-name>.mongodb.net/myFirstDatabase"
    )

    # Create a connection using MongoClient. You can import MongoClient or use pymongo.MongoClient
    from pymongo import MongoClient

    client = MongoClient(CONNECTION_STRING)

    # Create the database for your example
    return client["user_shopping_list"]

    # This is added so that files can reuse the function get_database()
    if __name__ == "__main__":
        # Get database
        dbname = get_database()

MongoDB 데이터베이스 연결을 얻으려면 CONNECTION_STRING을 사용하여 Mongo 클라이언트를 생성하십시오. 먼저 클러스터 이름, 사용자 이름 및 비밀번호를 변경하십시오.

이 Python MongoDB 레슨에서는 쇼핑 목록을 만들고 몇 가지 제품을 추가합니다. 이를 위해 사용자 쇼핑 목록이라는 데이터베이스를 만들었습니다.

반면에 MongoDB는 컬렉션과 문서를 추가할 때까지 데이터베이스를 설정하지 않습니다. 자, 다음으로 컬렉션을 만들어 봅시다.

Python에서 컬렉션 만들기

컬렉션을 만들려면 컬렉션 이름을 데이터베이스에 전달합니다. .py 파일에 코드를 복사하는 동안 적절한 들여쓰기를 확인하십시오.

collection_name = dbname["user_1_items"]

이렇게 하면 user_shopping_list 데이터베이스에 user_1_items라는 컬렉션이 생성됩니다.

Python에 문서 삽입

PyMongo insert_many() 메소드를 사용하여 한 번에 많은 문서를 삽입하십시오.

item1 = {
    "_id": "U1IT00001",
    "item_name": "Blender",
    "max_discount": "10%",
    "batch_number": "RR450020FRG",
    "price": 440,
    "category": "kitchen appliance",
}

item2 = {
    "_id": "U1IT00002",
    "item_name": "Egg",
    "category": "food",
    "quantity": 12,
    "price": 50,
    "item_description": "brown country eggs",
}
collection_name.insert_many([item1, item2])

_id 필드를 언급하지 않고 세 번째 문서를 삽입합니다. 이번에는 날짜 데이터 유형 필드를 포함합니다.

Python dateutil 모듈을 사용하여 PyMongo에 날짜를 추가합니다. ISODate는 Mongo 셸 함수이므로 Python에서는 작동하지 않습니다.

python -m pip install python-dateutil은 패키지를 설치하는 명령입니다. 그런 다음 pymongo test.py에 다음을 추가합니다.

from dateutil import parser

expiry_date = "2021-07-13T00:00:00.000Z"
expiry = parser.parse(expiry_date)
item3 = {
    "item_name": "Bread",
    "quantity": 2,
    "ingredients": "all-purpose flour",
    "expiry_date": expiry,
}
collection_name.insert_one(item3)

단일 문서를 삽입하기 위해 insert one() 메서드를 사용했습니다.

먼저 명령줄을 사용하여 pymongo test insert.py를 저장한 위치로 이동합니다. 그런 다음 Python pymongo test insert.py 명령을 사용하여 파일을 실행합니다.

Python의 쿼리

find()를 사용하여 모든 문서를 함께 볼 수 있습니다. 이를 위해 pymongo_test_query.py라는 별도의 파일을 만듭니다.

# Get the database using the method you defined in the pymongo_test_insert file
from pymongo_test_insert import get_database

dbname = get_database()

# Create a new collection
collection_name = dbname["user_1_items"]

item_details = collection_name.find()
for item in item_details:
    # This does not give a readable output
    print(item)

명령줄을 사용하여 pymongo test query.py를 저장한 폴더로 이동합니다. python pymongo test query.py 명령을 사용하고 프로그램을 실행할 수 있습니다.

데이터를 볼 수 있지만 형식이 적합하지 않습니다. 따라서 인쇄할 항목 이름과 범주는 다음과 같습니다.

print(item["item_name"], item["category"])

MongoDB가 모든 데이터를 수신하더라도 세 번째 문서에 Python KeyError가 표시됩니다. pandas를 사용하여 Python DataFrames에서 누락된 데이터 문제를 처리합니다.

DataFrame은 데이터 처리에 사용되는 2차원 데이터 구조입니다. 예를 들어 Pymongo의 discover() 메서드는 단 한 줄의 코드로 데이터 프레임으로 변환할 수 있는 사전 개체를 반환합니다.

다음과 같이 팬더 라이브러리를 설치하십시오.

python -m pip install pandas

for 루프를 다음 코드로 교체하여 KeyError를 한 번에 처리합니다.

from pandas import DataFrame

# convert the dictionary objects to a data frame
items_dfs = DataFrame(item_details)
print(items_dfs)

print(item['item name'], item['category'])를 주석 처리해야 합니다. 누락된 값의 경우 NaNNaT가 실수를 대체하는 데 사용됩니다.

Python 및 MongoDB의 인덱스

실제 데이터베이스의 문서 및 컬렉션 수는 지속적으로 증가하고 있습니다. 광범위한 컬렉션에서 특정 논문(예: 다목적 밀가루를 성분으로 포함하는 기록)을 검색하는 데 시간이 오래 걸릴 수 있습니다.

인덱스는 데이터베이스 검색을 더 빠르고 효율적이며 저렴하게 만듭니다(예: 정렬, 개수, 일치 등).

컬렉션 수준에서 MongoDB는 인덱스를 정의합니다. 인덱스를 보다 논리적으로 만들기 위해 컬렉션에 새 문서를 추가합니다.

insert many() 메서드를 사용하면 여러 문서를 동시에 삽입할 수 있습니다.