티스토리 뷰

◎ 데이터베이스(DB)

- DB를 쓰는 이유?

 데이터를 저장하고 나중에 잘 찾기 위해!

 

○ DB의 종류

- SQL : 행/열에 데이터를 저장하는 것. 정형화되어 있는 만큼, 데이터의 일관성이나 분석에 용이하지만 중간에 열을 하나 더하는 건 어렵다.

 

-NoSQL : 딕셔너리 형태로 데이터를 저장해두는 DB. 데이터 하나 하나 마다 같은 값들을 가질 필요가 없으므로 자유로운 형태의 데이터 적재에 유리하다. 하지만 일관성이 부족하다.

 

DB는 컴퓨터가 아닌 프로그램으로 설치하면 사용할 수 있다.

요새는 Cloud형태에서 제공하는 DB를 많이 사용한다.

왜?

유저가 몰리거나 / DB를 백업해야 하거나 / 모니터링 하기에 아주 용이하다.

수업에서도 Cloud형태에서 제공하는 NoSQL의 종류인 mongoDB Atlas를 사용한다.

 


○ 몽고db와 파이썬을 연결하기

연결을 위해서는 설치해야할 패키지가 있다.

> pymongo, dnspython < 을 설치하자.

 

새 파일에서 연습하자.

pymongo기본 코드를 넣어보자. (코드스니펫 사용)

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

이제 몽고DB페이지로 가서 연결하자.

connect의 connect your application을 누른 다음 드라이브를 파이썬으로 바꾼다.

코드를 복사한 후 url입력란에 넣어준다.

비밀번호를 바꾸어준 후 데이터를 넣어보자.

doc = {
    'name':'bob',
    'age':27
}

db.users.insert_one(doc)

오류메세지가 뜬다.

여기서 오류 메세지를 잘 살펴보면 'CERTIFICATE_VERIFY_FAILED'라고 되어있는데

이 부분은 'certifi'패키지를 설치하면 된다.

설치 후 certifi를 연결 하고 client의 뒤에 추가해야한다.

from pymongo import MongoClient
import certifi

ca = certifi.where()
client = MongoClient('mongodb+srv://test:<비밀번호>@cluster0.e4xrhvc.mongodb.net/cluster01?retryWrites=true&w=majority',tlsCAFile=ca)
db = client.dbsparta

다시 실행하면 프로세스가 종료되었다고 출력된다.

 

이제 몽고DB에 가서 확인해보자.

browse collections를 누르면 확인할 수 있다.

파일명은 언제 생긴걸까?

위에서 입력코드를 넣을 때 db의 users라는 collection에 doc값을 넣는다는 코드를 작성했기 때문이다.

 

 


○ 파이썬으로 DB조작하기

 

● 데이터 넣기

users라는 collection에 정보를 넣어보자.

db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})

각각의 정보를 따로 넣을 수도 있지만 자료형으로 데이터를 묶은 다음 한번에 넣는게 더 편리하다.

 

● 모든 결과값 보기 ( find( ) )

users에 넣어둔 모든 데이터를 뽑아보자.

all_users = list(db.users.find({},{'_id':False}))
print(all_users)

조건을 달아 뽑고싶다면 {}안에 조건을 넣어준다.

리스트형식으로 나오기때문에 하나씩 찍어준다.

all_users = list(db.users.find({},{'_id':False}))

for user in all_users:
    print(user)

 

 

● 특정 결과값 출력하기 ( find_one( ) )

이름이 'bobby'인 결과값만 출력해보자.

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

여기서 나이만 출력하고 싶다면?

print(user['age'])

 

 

● 수정하기 ( update_one( ) )

'bobby'의 나이를 바꾸어보자.

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

이름이 'bobby'인 곳의 'age'를 19로 바꾸어라.

 

 

● 삭제하기  ( delete_one( ) ) → 잘 안씀

이름이 'bobby'인 데이터를 없애보자.

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

bobby의 데이터값이 삭제되었다.

 

 


○ 연습하기

영화 순위, 제목, 별점 크롤링 한 것을 DB에 넣어보자.

 

db연결을 하기 위해 크롤링한 파일 안에 pymongo를 연결해준다.

데이터를 넣어보자.

데이터를 넣는 동작은?

.insert_one()

 

먼저, 들어갈 데이터에 해당하는 값을 정해준다.

        doc = {
            'rank': rank,
            'title': title,
            'star': star
        }

새로운 폴더를 만들어 데이터를 넣어보자.

        db.movies.insert_one(doc)

'movies'라는 폴더가 새로 생기고 안에 데이터가 들어갔다.

 

728x90