아무것도 모르고 시작하는 코딩

몽고DB 사용하기 - pymongo, Robo 3T 사용(feat.CRUD) | 아무것도 모르고 시작하는 코딩

ZNOS 2020. 9. 27. 15:43
반응형

2020/09/22 - [아무것도 모르고 시작하는 코딩] - 윈도우 몽고DB(mongoDB) 설치 방법 | 아무것도 모르고 시작하는 코딩

저번 포스팅에 따라 mongoDB가 잘 설치되었는지 확인해보자

1. 윈도우키+R 을 누른후 cmd를 입력하여 명령창을 킨다
2. mongod를 입력하고 엔터 친다

(이런식으로 뭔가 실행되는듯한 화면이 나올 것이다)

3. 브라우저에서 localhost:27017 주소로 이동한 뒤 다음과 같은 화면이 뜨는 것을 확인하면 실행 완료!

* 명령창을 종료하면 몽고DB 접속도 종료되므로 사용시에는 항상 켜놔야 한다

 

로보3T 준비하기

mongoDB라는 프로그램은 그래픽 유저 인터페이스(=GUI)를 제공하지 않기 때문에 데이터를 저장해도 사용자의 눈에 저장 내용이 보이지 않는다. 그래서 DB내부를 살펴보기 위한 프로그램인 robo3T를 설치한다. 

2020/09/24 - [아무것도 모르고 시작하는 코딩] - Robo3T(로보3T) 설치 | 아무것도 모르고 시작하는 코딩

로보3T 설치가 끝났다면 세팅을 해보자

 

실행을 시키면 아래와 같은 화면이 나올 것이다(처음엔 connection이 아무것도 없을 것이다)

Create 버튼을 누르고 위와 같이 Name, Address를 입력하고 Save를 누르자

 

pymongo로 mongoDB 조작하기

이제 파이참을 실행시켜보자

2020/09/15 - [아무것도 모르고 시작하는 코딩] - 파이썬(python) requests 라이브러리 설치(feat.파이참) | 아무것도 모르고 시작하는 코딩

저번 포스팅에서 언급했던 방식으로 pymongo를 설치한다. 

- project interpreter 로 접근해서 + 버튼 누르기

  Windows : file → setting → project interpreter
  Mac : preference → project interpreter로 접근

- pymongo 검색해여 install Package 버튼 누르기

 

app.py 파일을 만들어 CRUD를 연습해 보자

1. CREATE(생성)

from pymongo import MongoClient  # pymongo를 임포트 하기(패키지 설치 먼저 해야겠죠?)

client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta  # 'dbsparta'라는 이름의 db를 사용합니다. 'dbsparta' db가 없다면 새로 만듭니다.

# MongoDB에 insert 하기

# 'users'라는 collection에 데이터를 생성합니다.
db.users.insert_one({'name': '덤블도어', 'age': 116})
db.users.insert_one({'name': '맥고나걸', 'age': 85})
db.users.insert_one({'name': '스네이프', 'age': 60})
db.users.insert_one({'name': '해리', 'age': 40})
db.users.insert_one({'name': '허마이오니', 'age': 40})
db.users.insert_one({'name': '론', 'age': 40})

from pymongo import MongoClient  →  pymongo라는 라이브러리에서 MongoClient 패키지를 불러온다
client = MongoClient('localhost', 27017)   →   기본 포트가 27017이다. mongoDB에 접속한다는 얘기다
db = client.dbsparta    →   client에 dbsparta라는 폴더를 만든다고 생각하면 된다. 그 폴더를 db라고 정의한다
db.users.insert_one({'name': '덤블도어', 'age': 116})  →  db내 users라는 하위폴더에 ()안의 내용을 삽입한다
                                                                       (딕셔너리 형태로 저장됨)

코드를 실행시키기

위 코드를 입력했다면 (run)을 눌러 실행시켜보자. 그리고 robo3T를 실행시켜 보자

robo3T로 저장된 내용을 볼 수 있다

dbsparta 안에 colletctions 안에 user 안에 데이터가 저장되어 있는 것을 볼 수 있다.

우리가 저장한 name, age말고 _id 값이 있는데 이는 자동생성되는 값이다.

 

2. READ(조회)

 

from pymongo import MongoClient  # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)

client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta  # 'dbsparta'라는 이름의 db를 사용합니다. 'dbsparta' db가 없다면 새로 만듭니다.

# MongoDB에서 데이터 모두 보기
all_users = list(db.users.find({}))

print(all_users[0])  # 0번째 결과값을 보기
print(all_users[0]['name'])  # 0번째 결과값의 'name'을 보기

for user in all_users:  # 반복문을 돌며 모든 결과값을 보기
    print(user)

robo3T말고 파이참으로도 저장되어 있는 내용을 확인 할 수 있다.

(run)을 눌러 실행시켜보면 아래와 같다

all_users = list(db.users.find({}))  →  list는 자료를 리스트화 시켜주는 함수이다. 딕셔너리로 저장되어있는 데이터를 리스트화 시켜서 find({})로 데이터를 가져온다.

print(all_users[0])   →  1) all_user에서 [0]번째 값 출력

print(all_users[0]['name'])  →  2) all_user에서 [0]번째 값의 이름 출력

for user in all_users:
     print(user)              →  3) all_user의 모든 값 출력

만약 _id값이 거슬린다면
list(db.users.find({}, {'_id': False})) 
이런식으로 _id가 안보이게 할 수 있다.

 

DB 저장된 특정값 조회하기 (Read)

# MongoDB에서 특정 조건의 데이터 모두 보기
same_ages = list(db.users.find({'age': 40}))

for user in same_ages:  # 반복문을 돌며 모든 결과값을 보기
    print(user)

user = db.users.find_one({'name': '덤블도어'})
print(user)

# 그 중 특정 키 값을 빼고 보기
user = db.users.find_one({'name': '덤블도어'}, {'_id': False})
print(user)

이런 식으로 특정 값도 조회할 수 있다

 

3. UPDATE(업데이트)

db.users.update_one({'name': '덤블도어'}, {'$set': {'age': 19}})

db.users.update_one({'name': '덤블도어'}, {'$set': {'age': 19}})  →  name이 덤블도어인 항목을 찾아서 age를 19로 바꿔라

name이 덤블도어인게 여러 항목이 있을 경우 update_one은 첫번째 항목을 변경한다.
예를들어 db.users.insert_one({'name': '덤블도어', 'age': 86})의 값을 추가한다면 덤블도어 항목은 두개가 되고, 이를 모두 업데이트 하고 싶다면

db.users.update_many({'name': '덤블도어',{ '$set': 'age': 8}
이런식으로 update_many를 사용하여 덤블도어 이름을 가진 모든 값의 age를 8로 바꿀 수 있다.

 

4. DELETE(삭제)

db.users.delete_one({'name': '론'})

실제 개발할 때에는, 데이터를 삭제하면 복구가 어렵기 때문에 실제 DB 에서는 데이터 자체를 삭제하는 것보다 '사용하지 않음' 으로 처리해두는 경우가 많다.

 

ROBO 3T에서 변경

파이참에서 create, read, update, delete를 했지만 robo3T에서도 CRUD가 가능하다

해당 위치에서 마우스 오른쪽 버튼을 클리하면 insert Document라는 버튼이 나오고 이를 클릭하면

코드를 입력할 수 있는 창이 나온다. 마찬가지로 바꾸고 싶은 내용을 클릭하여 update 혹은 delete를 할 수 있다
(삭제는 그냥 키보드의 delete 버튼을 눌러도 된다)

 

끝.

 

 

반응형