-
21.09.15. 3-10~15강 (MongoDB, pymongo 코드)일기 2021. 9. 16. 00:39
[MongoDB]
- 크롬 주소창에 'http://localhost:27017/' 라고 썼을 때
'It looks like you are trying to access MongoDB over HTTP on the native driver port.'
의 내용이 뜨면 잘 돌아가고 있는 것
[robo 3T]
- robo 3T 실행 -> Create -> Name: myLocalDB(임의 지정) -> Save -> 더블클릭 or Connect
=>데이터베이스에 접속하는 것
=>MongoDB는 데이터베이스(데이터를 쌓아두는 것). 작동은 되고 있는데 내 눈엔 보이지 않음.
robo 3T를 가지고 MongoDB의 데이터를 시각화해서 보는 것.
[DB(Database) 개괄]
- 데이터베이스를 쓰는 이유? 데이터를 잘 찾기 위해서! (책장을 쓰는 이유? 책을 잘 찾기 위해서!)
- 크게 두 종류 1. SQL : REBMS. 행/열의 생김새가 정해진 엑셀과 유사.
데이터 50만개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어렵지만
정형화되어 있는 만큼, 데이터의 일관성, 분석에 용이
ex) MS-SQL My-SQL
2. noSQL (not only SQL) : 한 줄 한 줄이 딕셔너리. 딕셔너리 형태로 데이터 저장.
자유로운 형태의 데이터 적재에 유리하나 (유연성)
일관성 부족할 수 있음
ex) MongoDB
[pymongo로 DB조작하기]
- 엑셀을 파이썬으로 조작하려면, 특별한 라이브러리가 필요하다!
- 몽고디비를 파이썬으로 조작하려면, 특별한 라이브러리인 파이몽고가 필요하다!
*pymongo 기본 코드
from pymongo import MongoClient =>pymongo를 쓰겠습니다
client = MongoClient('localhost', 27017) =>내 컴퓨터에서 돌아가고 있는 mongoDB에 접속할 겁니다
db = client.dbsparta =>'dbsparta'라고 하는 database name으로 접속할 겁니다 (없으면 자동신설)
# 코딩 시작1. insert : 데이터 넣기
doc = {'name':'bobby','age':21} =>딕셔너리가 만들어지고 쌓임
db.users.insert_one(doc) =>그 딕셔너리를 users에 넣음 (db안에 users라는 collection에 insert해라)-> 파이썬에서 run (아무 반응 없음) -> robo 3T -> myLocalDB 우클릭 -> Refresh
-> 새로 생긴 'dbsparta' 더블클릭
-> Collections -> users -> View results in table mode
그러면 아래처럼 데이터가 눈에 보이게 됨
2-1. find : 복수 데이터 찾기
same_ages = list(db.users.find({'age':21},{'_id':False})) =>21살만 find해라(조건). id값은 나타내지 마라(False)
조건을 빈 중괄호로 두면 모든 doc을 find하라는 명령
print(same_ages)
=>[{'name': 'bobby', 'age': 21}, {'name': 'jane', 'age': 21}]
2-2. find_one : 단수 데이터 찾기
user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user)
3. update_one : 업데이트
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})=>name이 bobby인 데이터 찾아서 age를 19로 바꿔라
collection 이름 맞나 확인
print 안해도 됨
cf) update_many : 해당 조건의 데이터를 모두 set으로 update해라. 오류 위험성이 커서 잘 사용하진 않음
4. delete_one : 데이터 삭제
db.users.delete_one({'name':'bobby'})
print 안해도 됨
*pymongo 코드 요약
# 저장 - 예시
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'})[Quiz]
*내 답
1.
movie_star = db.movies.find_one({'title':'매트릭스'},{'_id':False},)
print(movie_star)2.
same_star = list(db.movies.find({'star':'9.39'},{'_id':False}))
print(same_star['title'])3.
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':0}})
*정답
1.
target_movie = db.movies.find_one({'title':'매트릭스'})
print (target_movie['star'])
2.
target_movie = db.movies.find_one({'title':'매트릭스'})
target_star = target_movie['star']
movies = list(db.movies.find({'star':target_star}))
for movie in movies:
print(movie['title'])
3.
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}})
=>같은 박스(star) 안에 있는 값이 문자열 형태이니 맞춰주기
'일기' 카테고리의 다른 글
21.09.17. 4-6~9강 (프로젝트1. 모두의 책 리뷰) (0) 2021.09.18 21.09.17. 4-1~5강 (Flask 서버 만들기) (0) 2021.09.17 21.09.14. 3-4~9강 (파이썬, 패키지(requests, bt4) 크롤링) (0) 2021.09.15 21.09.14. 3-1~3강 (복습) (0) 2021.09.14 21.09.11~14. 2-7~12강 (JSON, Ajax) (0) 2021.09.12