ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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) 안에 있는 값이 문자열 형태이니 맞춰주기

Designed by Tistory.