Everyday Dev System

웹개발 종합반 3일차 -2 본문

내배캠 초기 학습/웹개발 종합반

웹개발 종합반 3일차 -2

chaeyoung- 2023. 5. 10. 16:41

20230510 - 3:50 pm - 

파이썬 & MongoDB

 

 

MongoDB Atlas

목차

1. SQL 과 NoSQL 차이

2. pymongo 개념 

3. pymongo 활용 연습 문제

4.

 

 

1. SQL 과 NoSQL 차이

RDBMS(sql) 이미 정해진 칸에 데이터를 주입. 

                     엑셀과 같은 느낌으로 정해진 틀이 있음.

NoSQL은 비즈니스 유연성을 활용. 정해진 틀이 없음.

현업에서는 DB를 클라우드에 올려서 가져다가 씀.

 

 

 

2. pymongo 개념

 

pip install dnspython

pip install pymongo

 

기본 코드 :

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

URL은 mongoDB에 [connect] - [Driver] 해서 URL 복붙. (password는 개인 비밀번호로 변경해야 연결됨.)

 

1) 데이터 입력

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

doc = {
    'name' : '영수',
    'age' : 24  
}

db.users.insert_one(doc)

2) 데이터 불러오기

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

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

for a in all_users :
    print(a)
    
user = db.users.find_one({},{'_id':False})
print(user)

결과: 

{'name': '영수', 'age': 24}
{'name': '영희', 'age': 30}
{'name': '철수', 'age': 20}
{'name': '영수', 'age': 24}

 

3) 수정 및 삭제

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

 

요약 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@limchaeyoung.boi4rwj.mongodb.net/?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'})

 

3. pymongo 활용 연습 문제

 

1) 영화 데이터 mongoDB에 입력하기

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

import requests
from bs4 import BeautifulSoup

URL = "https://movie.daum.net/ranking/reservation"
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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

lis = soup.select('#mainContent > div > div.box_ranking > ol > li')

for li in lis :
    rank = li.select_one(".rank_num").text
    title = li.select_one(".tit_item").text.strip("\n")
    rate = li.select_one(".txt_grade").text
    
    doc = {
        'title' : title,
        'rank' : rank,
        'star' : rate
    }
    db.movies.insert_one(doc)

 

 

2) 

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

# 존 윅 4 의 평점 가져오기
# 존 윅 4 평점과 같은 평점의 영화 이름 출력하기
movie = db.movies.find_one({'title':'존 윅 4'})
target_star = movie['star']
print(target_star)

movies = list(db.movies.find({'star':target_star},{'_id':False}))
for a in movies:
    print(a['title'])

# 존 윅 4 의 평점 0점으로 수정하기
db.movies.update_one({'title':'존 윅 4'},{'$set':{'star':0}})
# 지니 뮤직의 1-50위 곡 스크래핑

import requests
from bs4 import BeautifulSoup

URL = "https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20230101"
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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')


trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs :
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    rank = tr.select_one('td.number').text[0:2].strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

'내배캠 초기 학습 > 웹개발 종합반' 카테고리의 다른 글

웹개발 종합반 4일차 -2  (1) 2023.05.12
웹개발 종합반 4일차 -1  (0) 2023.05.12
웹개발 종합반 3일차 -1  (1) 2023.05.10
웹개발 종합반 2일차 - 2  (2) 2023.05.09
웹개발 종합반 2일차 -1  (0) 2023.05.09