course/spartacoding

[웹개발 종합반] 3주차 (4) Database

hjkim0502 2021. 11. 1. 19:45

1. db 설치 확인: 크롬 창에 localhost:27017

It looks like you are trying to access MongoDB over HTTP on the native driver port.

 

2. robo 3T

  • mongoDB가 저장하는 데이터는 그래픽인터페이스(GUI)를 제공하지 않아 우리 눈으로 확인 불가능
  • robo 3T로 mongoDB 내부를 살펴볼 수 있음
  • robo 3T 세팅 (create -> 이름 설정)

3. database 개괄

db 종류

  • RDBMS(SQL): 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사
    • 중간에 새로운 요소 추가하여 데이터를 만들기 불편
    • 정형화 되어있기에, 일관적이고 데이터 분석에 용이
  • NoSQL: 딕셔너리 형태로 데이터 저장
    • 데이터 개별적으로 다른 정보들을 저장
    • 자유로운 데이터 적재, 일관성 부족할 수 있음

 

4. pymongo

  • mongoDB 프로그램을 조작하기 위한 라이브러리
  • from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 설치 후에)
    client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
    db = client.dbsparta                      # 'dbsparta'라는 이름의 db를 만듭니다.
    
    # MongoDB에 insert 하기
    
    # 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
    db.users.insert_one({'name':'bobby','age':21})
    db.users.insert_one({'name':'kay','age':27})
    db.users.insert_one({'name':'john','age':30})
    
    # MongoDB에서 데이터 모두 보기
    all_users = list(db.users.find({}))
    
    # 참고) MongoDB에서 특정 조건의 데이터 모두 보기
    same_ages = list(db.users.find({'age':21},{'_id':False}))
    
    print(all_users[0])         # 0번째 결과값을 보기
    print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기
    
    for user in all_users:      # 반복문을 돌며 모든 결과값을 보기
        print(user)
    
    # 특정 데이터 값 보기
    user = db.users.find_one({'name':'bobby'})
    print(user)
    # update
    
    # 생김새
    db.people.update_many(찾을조건,{ '$set': 어떻게바꿀지 })
    
    # 예시 - 오타가 많으니 이 줄을 복사해서 사용
    db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
    
    user = db.users.find_one({'name':'bobby'})
    print(user)
    
    # delete (거의 안씀)
    
    db.users.delete_one({'name':'bobby'})
    
    user = db.users.find_one({'name':'bobby'})
    print(user)
  • update_many나 delete_many는 위험
  • from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.dbsparta
    
    matrix = db.movies.find_one({'title':'매트릭스'},{'_id':False})
    print(matrix['point'])
    
    same_point = list(db.movies.find({'point':matrix['point']},{'_id':False}))
    for movie in same_point:
        print(movie['title'])
    
    db.movies.update_one({'title':'매트릭스'},{'$set':{'point':'0'}})
    # db에 point 값들이 string 이므로 자료형 통일
    pymongo 연습
  • robo 3T에 ""는 문자열 #는 숫자형