ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3주차] 스파르타코딩클럽 웹개발 종합반 3
    카테고리 없음 2022. 10. 21. 10:47

    3-9 여기서부터 데이터베이스에 대해 배우기 시작했다.

    데이터베이스에는 크게 두 가지 종류가 있는데

    하나는 SQL, 또 하나는 NoSQL이다.

     

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

     

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

     

    DB는 특별한 컴퓨터가 아닌, 우리가 쓰는 프로그램과 같은 것이다.

    그런데 요샤는 Cloud 형태로 제공해주는 곳들이 많다.

    왜냐하면 유저가 몰리거나, DB를 백업해야 하거나, 모니터링 하기가 아주 용이하기 때문이다.

     

    다음 차시에서는 mongoDB를 가입하고, 사용 해 본다고 했다.

     

    3-10 mongoDB 시작하기

    mongoDB 회원가입을 한 후 내 DB를 만들었다.

     

    3-11 mongoDB 연결하기

    내가 만든 DB로 파이썬에 연결 해 보았다.

    연결 하기 전 pymongo , dnspython 패키지를 설치하였다.

    from pymongo import MongoClient #pymongo 기본 코드
    client = MongoClient('여기에 URL 입력')
    db = client.dbsparta
    doc = {
        'name' : 'bob',
        'age':27
    }
    
    db.users.insert_one(doc) #users에 doc로 정의 된 name: bob, age: 27 정보 전송

    실행 시켜 완료 되었으면 mongoDB에서 Cluster0의 Collections 를 확인 해 보면 정보가 전송 된 것을 볼 수 있다.

     

    데이터 전송

     

    3-12 pymongo로 DB 조작하기.

    이번 강의에서는 파이썬으로 db에 저장, 한개 찾기, 여러개 찾기, db에 저장되어있던 데이터 바꾸기, 지우기를 배웠다.

     

    db에 저장시키는 코드

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

    db에 저장되어 있는 데이터 중 한 개 찾기

    user = db.users.find_one({'name':'bobby'}) #db에 name이 bobby 를 찾아라.

    db에 저장되어 있는 데이터 중 여러 개 찾기

    all_users = list(db.users.find({},{'_id':False})) # list 함수를 쓰고 _id 값은 제외하고 출력

    db에 저장되어 있는 데이터 바꾸기

    db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) # 'name'이 'bobby'인 데이터에 'age'를 19로 바꿔라

    db에 저장되어 있는 데이터 지우기

    db.users.delete_one({'name':'bobby'}) #'name'이 'bobby'인 데이터를 지워라.

    3-13 웹스크래핑 결과 저장하기.

    이번에는 3-8 퀴즈로 풀었던 코드를 이용하여 title, rank, star 데이터를 db에 저장 했다.

    bs4 코드 밑에 pymongo 코드를 넣어 준 다음

    import requests
    from bs4 import BeautifulSoup
    
    from pymongo import MongoClient
    client = MongoClient('url 주소')
    db = client.dbsparta

     

    맨 밑에 print(title,rank,.star)를 없애고 doc = { 'title' = title , 'rank' =rank , 'star' : star } 딕셔너리를 추가 후 

    db.movies_insert_one(doc) 코드를 이용해 db에 저장하였다.

    movies = soup.select('#old_content > table > tbody > tr')
    
    for movie in movies: #for문
        a= movie.select_one('td.title > div > a')
        if a is not None:
            title = a.text #영화 제목만 출력되게 .text 사용
            rank = movie.select_one('td:nth-child(1) > img')['alt'] # 순위만 나오도록 alt 사용
            star=  movie.select_one('td.point').text # 평점만 나오도록 .text 사용
            doc ={               # 딕셔너리 추가
                'title':title,
                'rank' : rank,
                'star' : star
            }
            db.movies.insert_one(doc)  # db에 저장하기

    그 다음 db에 가서 데이터가 잘 들어갔나 확인 후 잘 들어갔으면 끝!

    잘 들어갔다.

     

    3-14 웹스크래핑 결과를 이용해 퀴즈를 주셨다.

     

    첫번째 문제. 영화제목 '가버나움'의 평점을 가져오기

    from pymongo import MongoClient
    client = MongoClient('mongodb+srv://test:sparta@cluster0.xfq8zfp.mongodb.net/?retryWrites=true&w=majority')
    db = client.dbsparta
    
    movie = db.movies.find_one({'title':'가버나움'}) #'title'이 '가버나움'인 데이터를 찾아라.
    print(movie['star']) # 찾은 데이터 중 'star' 만 출력해라.

    두번째 문제

    '가버나움'의 평점과 같은 평점의 영화 제목들을 찾아오기.

    이게 상당히 어려웠다.. 주석들은 제가 이해하려고 막 적어두었습니다..

    from pymongo import MongoClient
    client = MongoClient('mongodb+srv://test:sparta@cluster0.xfq8zfp.mongodb.net/?retryWrites=true&w=majority')
    db = client.dbsparta
    
    movie = db.movies.find_one({'title':'가버나움'}) #'title'이 '가버나움'인 데이터를 찾아라.
    star = movie['star'] # 데이터의 'star' 값을 변수 star로 정의
    
    all_movies = list(db.movies.find({'star':star},{'_id':False})) # 'star'와 변수 star와 같은 데이터를 all_movie로 정의
    for m in all_movies: # 변수 all_movie랑 같은 데이터가 나올때까지 반복
        print(m['title']) # 나온 데이터 중 'title' 만 출력

    세번째 문제 

    '가버나움' 영화의 평점을 0으로 만들기 (0은 문자열 0으로)

    from pymongo import MongoClient
    client = MongoClient('mongodb+srv://test:sparta@cluster0.xfq8zfp.mongodb.net/?retryWrites=true&w=majority')
    db = client.dbsparta
    
    db.users.update_one({'title':'가버나움'},{'$set':{'star':'0'}}) # 'title' '가버나움'의 'star'를 문자열 '0'으로 바꿔라.

    0을 문자열로 표시하라는게 뭔지 몰라서 결국 강의를 보고 알았다...

    벌써 3주차가 끝나고 숙제밖에 남지 않았다.

    너무 슉슉 지나간다 ㅋㅋㅋㅋ

Designed by Tistory.