3-11 DB개괄
DB
database
를 쓰는 이유는 데이터를 '잘' 가져다 쓰기 위해서다.
예를 들어 책장을 쓰는 이유는 책을 잘 정리해서 나중에 책을 잘 찾기 위함과 비슷한 맥락이다 !
크롬 창에 localhost:27017
이라고 쳐서 아래와 같은 화면이 나온다면 DB가 돌아가고 있는 것.
DB
의 종류✔ 행/열이 정해진 엑셀에 데이터를 저장하는 것과 유사
✔ 장점 : 정형화된 데이터를 뽑아가는 방식에는 최적화
✔ 단점 : 중간에 바꾸기가 불편
✔ ex) MS-SQL, My-SQL 등
✔ 딕셔너리 형태로 데이터를 저장 하는 DB
✔ 데이터마다 값이 다름
✔ 장점 : 데이터 변경에 유연하다.
✔ ex) MongoDB
mongoDB
: NoSQL 데이터베이스로, 실행되어도 눈에 보이지 않음
Robo3T
: mongoDB의 데이터를 볼 수 있도록 시각화 하는 프로그램
우리는 Robo3T를 이용해 mongoDB의 데이터를 시각화시켜서 확인한다 !
3-12 Pymongo로 DB조작하기
pymongo
Python
으로 mongoDB
를 조작하기 위해서 남이 만들어 놓은 라이브러리인 Pymongo
를 사용한다.
from pymongo import MongoClient # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient('localhost', 27017) # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbpymongo # 'dbpymongo'라는 이름의 db를 만듭니다.
# 코딩 시작
insert
insert
를 사용해 데이터를 저장할 수 있다.
# insert - 데이터 저장하기
# 'users'라는 collection에 넣기
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
find
/ find_one
find
/find_one
를 사용해 데이터를 찾을 수 있다.
# find - 모든 결과 값을 보기
# mogoDB에 있는 데이터 모두 보기
all_users = list(db.users.find({},{'_id':False}))
# 반복문을 돌며 모든 결과값을 보기
for users in all_users:
print(users)
# 결과
{'name': 'john', 'age': 30}
{'name': 'bobby', 'age': 21}
{'name': 'kay', 'age': 27}
{'name': 'jane', 'age': 21}
# mongoDB에서 특정 조건의 데이터 모두 보기
same_ages = list(db.users.find({'age':21},{'_id':False}))
for users in same_ages:
print(users)
# 결과
{'name': 'bobby', 'age': 21}
{'name': 'jane', 'age': 21}
# find_one - 특정 결과 값을 뽑아보기
# mongoDB에서 {'name':'bobby'}인 데이터만 보기
user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user)
# 결과
{'name': 'bobby', 'age': 21}
update_one
update_one
를 사용해 데이터를 수정할 수 있다.
# update_one - 데이터 수정하기
# {'name':'bobby'}인 데이터를 찾아서 {'age':19}로 수정
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
delete_one
delete_one
를 사용해 데이터를 삭제할 수 있다.
그렇지만 데이터를 삭제하는 일은 위험하기때문에 대부분 쓰지 않는다.
# delete_one - 데이터 삭제하기
# {'name':'bobby'}인 데이터를 찾아서 삭제
db.users.delete_one({'name':'bobby'})
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
저번에 한 영화페이지 크롤링 결과를 이용해서 pymongo를 연습해보려고 한다.
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbpymongo
## 코딩 시작
find_one
(영화 '매트릭스'의 평점 가져오기)target_movie = db.movies.find_one({'title':'매트릭스'})
print(target_movie['star'])
# 결과
9.39
find
('매트릭스'의 평점과 동일한 영화 제목들 가져오기)target_movie = db.movies.find_one({'title':'매트릭스'})
terget_star = target_movie['star']
movies = list(db.movies.find({'star':terget_star}))
for movie in movies:
print(movie['title'])
# 결과
인생은 아름다워
매트릭스
라이언 일병 구하기
사운드 오브 뮤직
헬프
포레스트 검프
안녕 베일리
글래디에이터
인생은 아름다워
.
.
.
update
('매트릭스'의 평점을 0으로 만들기)db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}})