스파르타 웹개발종합반 3주차-2

thermal·2022년 9월 18일
0

mongoDB 활용

pymongo 기본 코드

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

// url : mongodb+srv://아이디:비밀번호@cluster0.dvplohg.mongodb.net/클러스터명?retryWrites=true&w=majority
  • connect > connect to application > (python, 3.6 or lator로 설정) > 밑에 주소 복사하면 위의 url 나옴

db에 데이터 넣기

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

db.users.insert_one(doc)

  • Clustor0의 collection에 데이터가 들어온 것을 확인 가능
  • users는 컬렉션. 대충 비슷한 데이터 모아두기 위해 설정

db에서 데이터 꺼내오기

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

for i in all_users :
    print(i)
  • db.users.find({조건})
  • 조건 없음(전부 가져오기) : {}
  • 결과에서 _id값은 빼기 : {'_id':False}
  • list화하지 않으면 그냥 <pymongo.cursor.Cursor object at 0x000001B54BE87940>로 나오니까 출력하려면 리스트로 만들기

하나만 찾을 때 :

user = db.users.find_one({'name':'bob'},{'_id':False})
print(user)
  • db.users.find_one({조건})

db 데이터 수정하기

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
  • db.users._update_one({수정 대상 조건},{'$set':{수정 내용}})
  • 'name'이 'bobby'인 데이터를 찾아서 'age'를 19로 수정

db 데이터 삭제하기

db.users.delete_one({'name':'bobby'})
  • db.users.delete_one({조건})
  • 'name'이 'bobby'인 데이터를 삭제

요약

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.dvplohg.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

db에 영화 리스트 넣기

이전 포스트에서 크롤링한 영화 데이터 db에 넣기

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.dvplohg.mongodb.net/Cluster0?retryWrites=true&w=majority')
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.naver?sel=pnt&date=20210829',headers=headers)

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

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')


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

for i in movies:
    a = i.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        rank = i.select_one('td.ac > img')['alt']
        score = i.select_one('td.point').text
        doc = {
            'title' : title,
            'rank' : rank,
            'score' : score
        }
        db.movies.insert_one(doc)

퀴즈

(db에 영화 데이터 넣은 후 실습)

db 데이터 사용 위해 기본으로 아래 코드 깔고 감 :

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.dvplohg.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

  1. db에서 영화 가버나움의 평점 가져와 출력
ga_score = db.movies.find_one({'title':'가버나움'})['score']
print(ga_score)

  1. 가버나움 평점과 같은 평점의 영화 제목 가져와 출력
ga_score = db.movies.find_one({'title':'가버나움'})['score']

same_score = list(db.movies.find({'score':ga_score}))
for i in same_score :
    print(i['title'])

  1. 가버나움 평점 0으로 만들기
  • '0'은 문자열임을 주의
db.movies.update_one({'title':'가버나움'},{'$set':{'score':'0'}})

0개의 댓글