이번 글에서는
파이썬 개발 환경에서 pymongo 패키지를 활용해
MongoDB 데이터베이스를 조작하는 방법에 대해 배워보겠습니다.
pymongo 패키지를 활용해서
CRUD 작업을 하나씩 진행해보도록 하겠습니다. ^^
inventory 컬렉션에 여러 데이터들을 넣어보겠습니다.
# CREATE
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
connection = pymongo.MongoClient("mongodb://localhost:27017/")
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
query = [
{ "item": "canvas", "qty": 100, "size": {"h": 28, "w": 35.5, "uom": "cm" }, "status": "A"},
{ "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
{ "item": "mat", "qty": 85, "size": { "h": 27.9, "w": 35.5, "uom": "cm" }, "status": "A" },
{ "item": "mousepad", "qty": 25, "size": { "h": 19, "w": 22.85, "uom": "cm" }, "status": "P" },
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "P" },
{ "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
{ "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
{ "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" },
{ "item": "sketchbook", "qty": 80, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
{ "item": "sketch pad", "qty": 95, "size": { "h": 22.85, "w": 30.5, "uom": "cm" }, "status": "A" }
]
# 쿼리한다.
result = collection.insert_many(query)
# 쿼리 실행결과 확인
print("실행 결과:", result.acknowledged)
print("입력 데이터 개수:", len(result.inserted_ids))
# connection 종료
connection.close()
<실행결과> : 10건의 데이터가 생성되었습니다.
inventory 컬렉션의 데이터 중
status가 A인 데이터를 조회해 보겠습니다.
# READ
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
connection = pymongo.MongoClient("mongodb://localhost:27017/")
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
query = { "status": "A" }
# 쿼리한다.
datas = collection.find(query)
# 쿼리 실행결과 확인
for data in datas:
print(data)
# connection 종료
connection.close()
<실행결과> : 조건에 맞는 5건의 데이터가 datas에 담겨있습니다.
inventory 컬력션에서
qty가 50보다 작은 데이터들의
size.uom을 in으로
status를 P로 수정하겠습니다.
# UPDATE
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
connection = pymongo.MongoClient("mongodb://localhost:27017/")
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
filter_query = { "qty": { "$lt": 50 } }
update_query = {"$set": { "size.uom": "in", "status": "P" }}
# 쿼리한다.
result = collection.update_many(filter_query, update_query)
# 쿼리 실행결과 확인
print("실행 결과:", result.acknowledged)
print("입력 데이터 개수:", result.modified_count)
<실행결과> : 3건의 데이터가 수정되었습니다.
inventory 컬렉션에서
status가 A인 데이터를 삭제하겠습니다.
# DELETE
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
connection = pymongo.MongoClient("mongodb://localhost:27017/")
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
query = { "status" : "A" }
# 쿼리한다.
result = collection.delete_many(query)
# 쿼리 실행결과 확인
print("실행 결과:", result.acknowledged)
print("입력 데이터 개수:", result.deleted_count)
<실행결과> : 조건에 해당하는 데이터 4건 삭제
자원 자동 반환을 위해 with문과 함께 사용할 수 있습니다.
# with문과 함께 사용
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
with pymongo.MongoClient("mongodb://localhost:27017/") as connection:
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
query = {}
# 쿼리한다.
datas = collection.find(query)
# 쿼리 실행결과 확인
for data in datas:
print(data)
<실행결과> : 5건의 데이터가 조회되었습니다.
데이터 분석을 위해
쿼리 결과를 pandas DataFrame으로 변형할 수 있습니다.
# 쿼리 실행결과를 pandas DataFrame 형태로 변환
# !pip install pymongo (pymongo 패키지 설치)
import pymongo
# mongodb connection 연결
with pymongo.MongoClient("mongodb://localhost:27017/") as connection:
# 데이터베이스를 찾는다.
database = connection["test"]
# 데이터베이스에서 컬렉션을 찾는다.
collection = database["inventory"]
# 쿼리문 작성
query = {}
# 쿼리한다.
datas = collection.find(query)
# 쿼리 실행결과를 DataFrame 형태로 변환
li = []
for data in datas:
li.append(data)
dataframe = pd.DataFrame(li)
<실행결과> : dataframe에 데이터가 잘 담겨 있습니다.