[강의] 스파르타 코딩클럽 웹개발 풀스택 3주차_DB

lzlkolo·2022년 12월 26일
0

DB를 쓰는 이유: 데이터를 잘 찾기 위해서

SQL

행/열의 생김새가 정해져있음
셀에 데이터를 저장하는 것과 유사
데이터의 일관성, 분석에 용이

비즈니스가 잘 안바뀌는 곳에서 사용하기 용이

ex) MS-SQL, My-SQL 등

NoSQL: Not Only SQL(SQL뿐만 아니다)

데이터 하나하나마다 다른값을 가질 수 있음
자유로운 형태의 데이터 적재에 유리
일관성 부족

ex) MongoDB

DB란 우리가 쓰는 프로그램과 같아서 DB를 설치하고 사용한다.
요새는 Cloud형태로 사용한다.

MongoDB

라이브러리 설치
$ pip install dnspython
$ pip install pymongo

pymongo로 접속

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

URL입력하는 곳에 생성한 DB-connect-connect your application에서 DRIVER, VERSION 맞춰준 후 주소 복사

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:<password>@cluster0.safzmwr.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

그리고 password에 db생성시 입력한 암호(test) 입력

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

여기까지 라이브러리를 부르는 작업

DB에 자료를 넣어보자
doc라는 딕셔너리를 생성한 후 db.users.insert_one(doc)로 넣어준다.

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

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

db.users.insert_one(doc)

그러면 DB에 업로드된다!

여기서 users는 큰 데이터베이스 안에 있는 collection, 묶어놓는 단위, 소그룹이라고 생각하면 된다.

pymongo 데이터 찾기

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

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

for a in all_users:
    print(a)

실행하면 터미널 창에 dB에 입력되어있는 데이터가 출력된다.
저기서 '_id':False}는 id는 출력하지 않겠다는 뜻(데이터를 깔끔하게 볼 수 있음)

난 뭐가 문제인지 pymongo import에서 에러가 떠서 python dbprac.py 명령어로 실행이 가능하다.. > 라이브러리를 가상환경에 설치 안해서 그런거였음!!!! 가상환경에 설치하고 잘 실행됨 ㅎㅎ

데이터 하나만 가져오기

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

user = db.users.find_one({'name':'bobby'})

mongoDB 내용 업데이트

name이 영수인 데이터를 찾아서 age를 19로 업데이트

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

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

DB에 영수age가 19로 업데이트 되어있음

pymongo 내용 삭제

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

db.users.delete_one({'name':'영수'})

DB에 영수가 삭제된다.

pymongo 코드 요약

# 저장 - 예시
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에 저장하기

for tr in trs:
    a = tr.select_one('td.title > div > a')

    if a is not None:
        title = a.text
        rank = tr.select_one('td:nth-child(1) > img')["alt"]
        star = tr.select_one('td.point').text

        doc = {
            'title' : title,
            'rank' : rank,
            'star' : star
        }

        db.movies.insert_one(doc)

이렇게 실행하면 db에 movies라는 collection이 새로 생기고 거기에 영화 데이터가 들어가있다!
실행 횟수만큼 데이터가 들어가게 되니 조심..ㅎ

데이터 찾기

1) 가버나움의 평점 가져오기

movie = db.movies.find_one({'title':'가버나움'})
print(movie['star'])

2) 가버나움과 같은 평점의 영화 가져오기

movie = db.movies.find_one({'title' : '가버나움'})

target_star = movie['star']

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

for a in movies:
    print(a['title'])

3) 가버나움의 평점을 0으로 만들기

db.movies.update_one({'title':'가버나움'},{'$set':{'star':0}})

0개의 댓글

관련 채용 정보