3주차 코딩 개발 일지 (3-10 ~ 3-14 )

☑️ 데이터베이스

  • MongoDB = 데이터베이스, 컴퓨터에는 돌아가고 있지만 내 눈에는 안 보임
  • robo 3T = MongDB를 시각화해줌

데이터베이스를 사용하는 이유는 잘 쌓아둔 데이터를 잘 찾아 사용하기 위해서이다. 데이터베이스 '프로그램을 만드는' 회사마다 방식이 다르다.

✦ RDBMS(SQL)

행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.

ex) MS-SQL, My-SQL 등

✦ No-SQL

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

ex) MongoDB


☑️pymongo로 DB 조작하기

  • 종류 : insert, find, update, delete
  • mongoDB는 딕셔너리가 쌓이는 것

✦ Insert

from pymongo import MongoClient   
→ pymongo를 쓰겠습니다.

client = MongoClient('localhost', 27017) 
→ 내 컴퓨터에서 지금 돌아가고 있는 mongoDB에 접속할 겁니다.

db = client.dbsparta
→ dbsparta라고 하는 DB 이름으로 접속할 겁니다.

doc = {'name':'bobby','age':21}
db.users.insert_one(doc)  
→ db 안에 users라는 collection에 insert 해라


✽ 기본 형태
from pymongo import MongoClient  
client = MongoClient('localhost', 27017) 
db = client.dbsparta 

doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

✦ Find

from pymongo import MongoClient  
client = MongoClient('localhost', 27017) 
db = client.dbsparta 

same_ages = list(db.users.find({'age':21},{'_id':False}))
→ {'_id':False} id값은 제외라는 뜻

same_ages = list(db.users.find({},{'_id':False}))
→ id값을 제외하고 모두({}) 가져와라

for person in same_ages:
    print(same_ages)

✦ Find_one

user = db.users.find_one({'name':'bobby'})
→ name bobby만 갖고 와라

user = db.users.find_one({'name':'bobby'},{'_id':False})
→ id를 제외하고 name bobby만 갖고 와라

print(user['age'])
→ user에 age만 출력해라

✦ Update_one

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
→ name이 bobby인 것을 찾아서 age를 19로 바꿔라

✦ Delete_one

db.users.delete_one({'name':'bobby'})
→ name이 bobby인 것을 찾아서 delete해라


☑️ 웹크래핑 결과 저장하기

import requests
from bs4 import BeautifulSoup

✽ MongoDB 기본 코드 추가
from pymongo import MongoClient			
client = MongoClient('localhost', 27017)
db = client.dbsparta


headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
    a_tag = tr.select_one('td.title > div > a')
    if a_tag is not None:

        title = a_tag.text
        rank = tr.select_one('td:nth-child(1) > img')['alt']
        star = tr.select_one('td.point').text

        doc = {                 → 딕셔너리를 만듬
            'rank':rank,
            'title':title,
            'star':star
        }

        db.movies.insert_one(doc)

☑️ Quiz
1. 영화제목 '매트릭스' 평점 가져오기

  • 완성코드
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta


movie = db.movies.find_one({'title':'매트릭스'})
print(movie['star'])
  1. '매트릭스'의 평점과 같은 평점의 영화 제목들을 가져오기
  • 완성코드
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta


target_movie = db.movies.find_one({'title':'매트릭스'})
target_star = target_movie['star']

movies = list(db.movies.find({'star':target_star}))

for movie in movies:
    print(movie['title'])
  1. 매트릭스 영화의 평점을 0으로 만들기
  • 완성코드
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

db.movies.update_one({'title':'매트릭스'},{'$set':{'star':0}})

좋은 웹페이지 즐겨찾기