[MongoDB] Python으로 CRUD 구현 - Pymongo

파이썬으로 MongoDB에 연결해서 CRUD를 구현해볼 것이다. 시작 전 Pymongo 라이브러리가 설치 되어있어야한다.

1. Pymongo 임포트 및 연결 테스트

import pymongo

connection = pymongo.MongoClient() # 주소를 쓰지 않을 경우 무조건 27017로 접속. aws를 쓸 경우 ('mongodb://ip주소')
db_test = connection.test # db = connection["test"] 데이터베이스 없으면 만들어 짐

print(db_test) # Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test')

pymongo를 import하고 MongoClient() 메소드를 사용하여 객체를 생성한다. 생성된 객체로 데이터베이스 이름을 명시 해주면 데이터베이스 객체가 생성된다. 위의 과정으로 데이터베이스 생성 또는 기존에 있다면 선택이 가능하다.

print(db_test)로 'Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test')' 와 같이 출력되면 연결이 된 것이다.

print(dir(db_test))

db_test는 객체이므로 dir()을 이용해 내장된 변수와 메소드를 확인할 수 있다.

2. CRUD (with GUI)

먼저 사용될 Collection을 만들어 보자. (해당 이름의 Collection이 존재한다면 선택)

db_test_users = db_test.users
print(db_test_users)
print(dir(db_test_users))

만들어진객체를 print()를 이용해 구성을 살필 수 있다. 명령어는 snake_case 형식으로 되어있다. (기존 MongoDB Shell에서 쿼리를 할 때는 camelCase이므로 헷갈리지 말자.)

모든 메소드엔 비교 문법 역시 적용 가능핟.

1) Create

데이터 입력 형식을 JSON형식으로 만들어줘야한다. 그리고 필드(속성)값은 "" 또는 ''으로 감싸주어 변수로 인식이 되지 않아야 입력이 가능하다.

  • insert_one(): 하나의 데이터만 입력할 때
user1 = {"name": "sangrae", "age": 29, "is_male": True, "tags": ["Back-End", "Front-End", "MonogoDB"]}

db_test_users.insert_one(user1)

_id에 고유 Primary Key가 지정이 되고 각 필드에 벨류대로 타입이 결정된다.

  • insert_many(): 여러개의 데이터를 입력할 때
user2 = {"name": "minyoung", "age": 24, "is_male": False, "occupation": "Producer", "skills": ["Video-making"]}
user3 = {"name": "leo", "age": 27, "is_male": True, "company": {"name": "Julia", "addr": "LosAngeles, California USA"}}
user4 = {"name": "mia", "age": 23, "is_male": False, "occupation": "Student"}

db_test_users.insert_many([user2, user3, user4])

정해진 필드, 정해진 타입 등의 제한이 없는 MongoDB의 특성을 잘 볼 수 있다.

2) Read

  • find_one(): 조건에 해당되는 가장 빨리 검색되는 하나의 데이터만 찾을 때 (조건이 없을 땐 가장 첫번째 데이터)
sangrae = db_test_users.find_one({"name": "sangrae"})
print(sangrae)

  • find(): 조건에 해당되는 모든 데이터를 조회 (조건이 없을 땐 모든 데이터)
users = db_test_users.find({"age": {"$gte": 24}})

for user in users:
  print(user)

users[0]와 같이 인덱스로 특정 값만 조회해 보거나 반복문을 이용하여 모두 조회해 볼 수 있다.

3) Update

$set, $inc 등의 키워드를 사용해서 수정할 수 있다.

  • update_one(): 하나만 수정할 때. 찾기위한 조건과 바꿀 값을 넣어주면 된다.
db_test_users.update_one({"name":"sangrae", "age": 29}, {"$set": {"age": 30}})

  • update_many(): 여러개의 데이터를 한번에 수정.
db_test_users.update_many({"age": {"$lt": 28}}, {"$set": {"occupation": None}})


없던 필드는 추가가 된다.

4) Delete

  • delete_one(): 하나만 삭제.
db_test_users.delete_one({"name": "sangrae"})

  • delete_many(): 여러개 삭제.
db_test_users.delete_many({"occupation": None})

좋은 웹페이지 즐겨찾기