[수업 목표]
1. 파이썬 기초 문법을 안다.
2. 원하는 페이지를 크롤링 할 수 있다.
3. pymongo를 통해 mongoDB를 제어할 수 있다.
들어가기 전에 - DB는 왜 쓰는 것일까?
Q. 우리가 방 정리를 하는 이유는 무엇일까요?
👉 나중에 잘 찾기 위해서
Q. 교보문고에 가서 책을 찾는 다고 하면?
👉꽂혀진 방법대로 찾아야 쉽게 찾을 수 있겠죠! 😎 (섹션 → 출판사 → 책 제목)
👉우리 눈에 보이진 않지만, 사실 DB에는 `Index` 라는 순서로 데이터들이 정렬되어 있답니다!
Database에는, 크게 두 가지 종류가 있습니다.
👉 **RDBMS(SQL)** 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다. ex) MS-SQL, My-SQL 등 👉 **No-SQL** 딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다. ex) MongoDB 👉 요새는 Cloud 형태로 제공해주는 곳들이 많답니다. - 유저가 몰리거나 / DB를 백업해야 하거나 / 모니터링 하기가 아주 용이하기 때문이죠! - 그래서, 우리도 최신 클라우드 서비스인 `mongoDB Atlas`를 사용해 볼 것이랍니다!
# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})
pymongo(find)
# 모든 데이터 뽑아보기
all_users = list(db.users.find({},{'_id':False}))
print(all_users[0]) # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기
for user in all_users: # 반복문을 돌며 모든 결과값을 보기
print(user)
user = db.users.find_one({'name':'bobby'})
# 오타가 많으니 이 줄을 복사해서 씁시다!
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
db.users.delete_one({'name':'bobby'})
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.axdjt.mongodb.net/Cluster0?retryWrites=true&w=majority',
tlsCAFile=ca)
db = client.dbsparta
#영화 '가버나움'의 평점을 찾기
target_movie = db.movies.find_one({'title': '가버나움'})
target_star = target_movie['star']
print(target_star) #9.59
#'가버나움'과 같은 평점을 갖고 있는 영화 모두 찾기
movies = list(db.movies.find({'star': target_star}))
for movie in movies:
print(movie['title']) #그린 북 / 가버나움
# #영화 '법정'의 평점 0점으로 만들기
db.movies.update_one({'title': '법정'}, {'$set': {'star': '0'}}) #mongoDB에 '법정'의 평점 0으로 저장됨을 확인할 수 있음