데이터베이스(db)

[Python] Pymongo 데이터베이스 생성, 삭제, 변경, 정렬 (Collection, Database)

끄적끄적아무거나 2021. 12. 1. 18:26
반응형

 

목차

     

     

    Pymongo 데이터베이스(Database), 콜렉션(Collection) 생성, 데이터 입력

     

    이번 포스트에서는 Pymongo를 사용해서 MongoDB의 Database, Collection을 생성, 삭제, 변경, 정렬, 추가 하는 예제를 구현할 것입니다. 기본 설치가 되어 있지 않다면 하단에 포스트를 참조 하시고 설치 후 아래 과정을 진행 하시면 됩니다.

    https://scribblinganything.tistory.com/195

     

    [Python] MongoDB 설치, 파이썬과 연동(robomongo/robo 3t)

    목차 Mongodb, robomongo 윈도우에 설치 Mongodb 설치 과정 1. 괄호안의 사이트를 들어가서 아래 그림1과 같이 "On-premises", "platform: Windows", "Package:msi" 로 설정하고 msi 파일을 다운 받는다. (https:..

    scribblinganything.tistory.com

     

    Pymongo를 사용해서 DB를 만들고 그 아래 Collection을 만듭니다. Collection은 MySQL에 테이블(Table)과 동일한 개념으로 생각하시면 됩니다. DB 창고 안에 데이터를 넣을 테이블을 만드는 것입니다.

     

    그리고 만들어진 Collection에 데이터를 입력 합니다. 

     

    예제 코드>>

    import pymongo
    import random
    
    db_data0 = {
    "random_number1": str(random.randint(0,1000)),
    "random_number2": str(random.randint(0,1000))
    }
    
    db_data1 = {
    "random_number1": str(random.randint(0,1000)),
    "random_number2": str(random.randint(0,1000))
    }
    
    connect_to = pymongo.MongoClient("localhost", 27017)
    mdb = connect_to.new_db
    collection = mdb.members
    
    collection.insert_many([db_data0,db_data1])
    
    for _ in range(100):
        db_data = {
        "random_number1": str(random.randint(0,1000)),
        "random_number2": str(random.randint(0,1000))
        }
        collection.insert_one(db_data)

     

    14번 라인 : pymongo에 연결 합니다.

    15번 라인 : mdb는 임의의 명입니다. new_db라는 새로운 DB를 생성 합니다.

    16번 라인 : members라는 명으로 collection을 생성 합니다.

    18번 라인 : insert_many 함수를 사용해서 여러 값을 한번에 넣습니다.

    25번 라인 : insert_one 함수를 사용해서 하나씩 값을 입력 합니다.

     

     

    결과>>

     

    새로운 DB가 만들어 졌고 Collection 아래에 members에 데이터가 들어 갔습니다.

     

    반응형

     

     

     

    Pymongo DB 검색하기(정규표현식)

     

    Pymongo DB 검색은 find라는 함수를 사용해서 검색할 수 있습니다. find에 query를 넣어서 검색할 수 도 있습니다. 

     

    코드>>

    import pymongo
    
    connect_to = pymongo.MongoClient("localhost", 27017)
    mdb = connect_to.new_db
    collection = mdb.members
    
    searched = collection.find()
    print(searched[0])
    
    query = {"$or": [{"random_number1": '181'}, {"random_number2": '278'}]}
    searched = collection.find(query)
    for x in searched:
        print(x)

     

    7번 라인 : find 함수로 모든 members 데이터를 가져 옵니다. 한개 값만 가져오고 싶을 때는 find_one 함수를 사용하면 됩니다.

    10번 라인 : or 쿼리 문을 사용하여 해당 조건에 맞는 값을 모두 불러 옵니다.

     

     

    결과>>

    {'_id': ObjectId('61a7326cbcd1c8ff794714ca'), 'random_number1': '481', 'random_number2': '82'}
    {'_id': ObjectId('61a7326cbcd1c8ff794714d8'), 'random_number1': '900', 'random_number2': '278'}
    {'_id': ObjectId('61a7326cbcd1c8ff794714db'), 'random_number1': '181', 'random_number2': '596'}

     

    members의 첫번째 결과와 Query에 의해 걸러진 결과입니다.

     

     

     

     

    정규표현식(Regex)을 Query(쿼리)에 보내서 찾을 수있습니다.

     

    코드>>

    import pymongo
    
    connect_to = pymongo.MongoClient("localhost", 27017)
    mdb = connect_to.new_db
    collection = mdb.members
    
    query = { "random_number1": { "$regex": '^90' } }
    searched = collection.find(query)
    for x in searched:
        print(x)

     

    7번 라인: 90으로 시작하는 random_number1의 데이터를 정규표현식으로 걸러서 가져옵니다.

     

    결과>>

    {'_id': ObjectId('61a7326cbcd1c8ff794714d8'), 'random_number1': '900', 'random_number2': '278'}
    {'_id': ObjectId('61a7326cbcd1c8ff79471511'), 'random_number1': '905', 'random_number2': '646'}
    {'_id': ObjectId('61a7326cbcd1c8ff79471520'), 'random_number1': '909', 'random_number2': '485'}

     

     

     

    Pymongo DB 값 변경 하기 / 업데이트 하기

     

    업데이트는 update 함수를 사용해서 합니다. 아래는 한번에 여러개 바꿀 수 있는 update_many 입니다.

     

    코드>>

    import pymongo
    
    connect_to = pymongo.MongoClient("localhost", 27017)
    mdb = connect_to.new_db
    collection = mdb.members
    
    query = { "random_number1": { "$regex": '^90' } }
    collection.update_many(query,{"$set": {'random_number1': '777'}})
    
    query = { "random_number1": '777' }
    searched = collection.find(query)
    for x in searched:
        print(x)

     

    7~8번 라인 : 앞서 찾은 90으로 시작하는값을 777로 변경합니다.

     

     

    결과>>

    {'_id': ObjectId('61a7326cbcd1c8ff794714d8'), 'random_number1': '777', 'random_number2': '278'}
    {'_id': ObjectId('61a7326cbcd1c8ff79471511'), 'random_number1': '777', 'random_number2': '646'}
    {'_id': ObjectId('61a7326cbcd1c8ff79471520'), 'random_number1': '777', 'random_number2': '485'}

     

    앞서 90으로 시작한 결과들이 위처럼 변경 되었습니다.

     

     

     

     

    Pymongo DB 값 삭제 하기

     

    앞서 업데이트한 777값 중 첫번째 값만 삭제하겠습니다. 삭제 함수는 delete_one과 delete_many가 있습니다.

     

    코드>>

    import pymongo
    
    connect_to = pymongo.MongoClient("localhost", 27017)
    mdb = connect_to.new_db
    collection = mdb.members
    
    collection.delete_one({"random_number1": '777'})
    
    query = { "random_number1": '777' }
    searched = collection.find(query)
    for x in searched:
        print(x)

     

    7번 라인 : delete_one을 사용해서 첫번째로 나오는 "777"값을 삭제하였습니다.

     

    결과>>

    {'_id': ObjectId('61a7326cbcd1c8ff79471511'), 'random_number1': '777', 'random_number2': '646'}
    {'_id': ObjectId('61a7326cbcd1c8ff79471520'), 'random_number1': '777', 'random_number2': '485'}

    3개 중에 2개만 남았습니다.

     

     

     

    반응형