[python] python으로 MongoDB 연결하기 : MongoDB, pymongo, Studio 3T

2023. 1. 22. 20:21Backend/python

728x90
반응형

MongoDB

  • 다양한 플랫폼에서 사용할 수 있는 NoSQL 타입의 데이터베이스 프로그램으로, JSON과 비슷한 형태로 자료를 정리한다.
  • 각각의 딕셔너리인 도큐먼트가 모여 컬렉션, 컬렉션이 모여 DB가 되는 형태이다.

NoSQL

  • 딕셔너리 형태로 데이터를 저장하는 DB이다.
  • 데이터 하나하나 마다 같은 필드 값들을 가질 필요가 없어 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.

MongoDB 설치하기

1. terminal에서 HomeBrew를 설치한다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

명령어 입력 후 패스워드 입력란이 나오면 맥북 패스워드를 입력한다.
(🚨 맥북 패스워드를 먼저 설정해놓아야 설치가 가능하다!)

2. mongoDB를 설치한다.

brew tap mongodb/brew
brew install mongodb-community

3. mongoDB를 실행한다.

brew services start mongodb-community

4. 실행되었는지 확인한다.

http://localhost:27017
👆🏻위 경로에 접속했을 때 아래 화면처럼 나오면 성공~!

Studio 3T

  • MongoDB를 그래픽으로 볼 수 있게 도와주는 GUI이다.

Studio 3T 설치하기

1. [Robo 3T] 에 접속해서 설치한다.

(원래 Robo 3T를 설치하려 했으나 Studio 3T로 전환되어서 Studio 3T를 설치했다.)

2. Connection을 생성한다.

Manually~~ 선택 > Next

기본값으로 두고 > Next

pymongo

  • MongoDB 프로그램을 조작하기 위한 라이브러리이다.

pymongo 설치하기

1. 프로젝트의 가상환경에서 pymongo 패키지를 설치한다.

pip install pymongo

pymongo 사용 방법

1. DB 연결하기

from pymongo import MongoClient

# mongoDB는 27017 포트로 돌아간다.
client = MongoClient('localhost', 27017)

# db이름으로 설정한 db가 생성된다.
db = client.db이름
  • pymongo로 조작한 데이터는 위에서 설치한 Studio 3T에서도 확인할 수 있다.

2. insert : 데이터 추가하기

# 'users'라는 collection에 추가
db.users.insert_one({'name':'bobby','age':21})

3. find : 데이터 가져오기

find : 모든 결과 보기 🚨list()로 감싸야 한다.

# 전체 조회
all_users = list(db.users.find({}))

# 조건에 해당하는 데이터 전체 조회
same_ages = list(db.users.find({'age':21}))

# 키값을 기준으로 정렬
list(db.mystar.find({}, {'_id': False}).sort('like', -1))

find_one : 특정 결과만 보기

user = db.users.find_one({'name':'bobby'})

# 특정 키 값을 빼고 조회
user = db.users.find_one({'name':'bobby'},{'_id':False})

4. update : 데이터 수정하기

db.people.update_many(찾을조건, {'$set': 어떻게바꿀지})

db.users.update_one({'name': 'bobby'}, {'$set': {'age': 19}})

5. delete : 데이터 삭제하기

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

6. form : 클라이언트가 전달한 데이터 받기

name_receive = request.form['name_give']
728x90
반응형