본문 바로가기

프로젝트형 IoT 서비스 개발 4회차/3. 게이트웨이 디바이스 제어

[Day50] 2022-04-08(금) MongoDB5 - PyMongo CRUD- 김서연 강사님

728x90

[1] PyMongo CRUD

  - 기본적으로 Shell에서 사용하던 형식을 그대로 사용할 수 있다.

  1. INSERT

import pymongo


# mongodb 서버에 접속해서 작업할 수 있도록 MongoClient 객체 생성
client = pymongo.MongoClient("mongodb://XXX.XXX.XXX.XXX:27017")

# database 접속
print(client.list_database_names())     # db 목록 출력
db = client.get_database("sample")      # sample db 저장
myscore = db["score"]       # sample db 내의 score collection 저장

# 삽입 처리하기
my_dict = [{"name": "장동건", "address": "ssh서울"},
           {"name": "이민호", "address": "제주"},
           {"name": "소지섭", "address": "강원도"}]
x = myscore.insert_many(my_dict)

  2. QUERY

import pymongo


# mongodb 서버에 접속해서 작업할 수 있도록 MongoClient 객체 생성
client = pymongo.MongoClient("mongodb://xxx.xxx.xxx.xxx:27017")

# database 접속
print(client.list_database_names())     # db 목록 출력
db = client.get_database("sample")      # sample db 저장
myscore = db["score"]       # sample db 내의 score collection 저장
# sample 데이터베이스의 score 컬렉션에서 데이터 조회하기 -1
result = db.score.find_one()
print(result)
# sample 데이터베이스의 score 컬렉션에서 데이터 조회하기 -2
result2 = myscore.find_one()
print(result2)

# 컬렉션의 모든 document 조회
scorelist = myscore.find()
for mydoc in scorelist:
    print(mydoc)

print("="*100)

# 컬렉션에서 조건에 맞는 document 조회
scorelist = myscore.find({"java": {"$gte": 90}}, {"id": 1, "name": 1, "dept": 1, "addr": 1})
for mydoc in scorelist:
    print(mydoc)

  3. UPDATE

import pymongo


# mongodb 서버에 접속해서 작업할 수 있도록 MongoClient 객체 생성
client = pymongo.MongoClient("mongodb://xxx.xxx.xxx.xxx:27017")

# database 접속
print(client.list_database_names())     # db 목록 출력
db = client.get_database("sample")      # sample db 저장
myscore = db["score"]       # sample db 내의 score collection 저장

scorelist = myscore.find()
for mydoc in scorelist:
    print(mydoc)

# 업데이트 처리하기
query = {"id": "jang"}
updatevalue = {"$set": {"name": "장만용"}}

myscore.update_many(query, updatevalue)
scorelist = myscore.find()
for mydoc in scorelist:
    print(mydoc)

  4. DELETE

import pymongo


# mongodb 서버에 접속해서 작업할 수 있도록 MongoClient 객체 생성
client = pymongo.MongoClient("mongodb://xxx.xxx.xxx.xxx:27017")

# database 접속
print(client.list_database_names())     # db 목록 출력
db = client.get_database("sample")      # sample db 저장
myscore = db["score"]       # sample db 내의 score collection 저장

scorelist = myscore.find()
for mydoc in scorelist:
    print(mydoc)

# 삭제 처리하기
result = myscore.delete_many({"dept": "총무"})

scorelist = myscore.find()
for mydoc in scorelist:
    print(mydoc)

 

[2] PyMongo 연습 예제

  1. 미션 내용

mongodb로 다음과 같은 작업을 할 수 있도록 클래스를 작성하세요

1. MongoConnection - 생성자에서 몽고디비 클라이언트를 통해 몽고디비서버에 접속할 수 있도록 합니다.
  - getCollection 데이터베이스명과 컬렉션명을 입력받아 컬렉션 을 리턴하도록 작성합니다.

2. Board_Mongo 다음과 같은 조건을 만족할 수 있도록 메소드를 정의하세요
  1) getBoardData()
    - 게시판의 모든 데이터를 조회할 수 있도록 구현

  2) getBoard
    - 게시글 번호를 받아서 게시글을 조회할 수 있도록 작업하세요
    - 매개변수 : 게시글번호
    - 리턴값: 조회된 글

  3) write
    - 매개변수로 전달받은 데이터를 컬렉션에 저장할 수 있도록 작성합니다.

  4) remove
    - 매개변수로 전달받은 글 번호에 해당하는 게시글이 삭제되도록 작업합니다.

  5) updateBoard
    - 글의 타이틀이 수정되도록 작성합니다.
    - 매개변수로 글 번호와 수정할 타이틀 내용을 입력받아 처리합니다.

  6) search
    - 매개변수로 입력된 문자열이 게시글과 타이틀에 포함된 게시글을 찾아 출력
    - 매개변수는 검색어

3. board_test.py를 작성하시고 위의 6개의 메소드를 테스트하세요

  2. CODE

    1) MongoConnection.py

import pymongo
from datetime import datetime


class MongoConnection:
    def __init__(self, ip, port):
        self.client = pymongo.MongoClient("mongodb://"+ip+":"+port)

    def getCollection(self, db_name, collection_name):
        db = self.client.get_database(db_name)
        collection = db.get_collection(collection_name)
        return collection


class Board_Mongo:
    def __init__(self):
        connect = MongoConnection("XXX.XXX.XXX.XXX", "27017")
        self.collection = connect.getCollection("sample", "board")

    def getBoardData(self):
        objs = self.collection.find()
        for obj in objs:
            print(obj)

    def getBoard(self, no):
        obj = self.collection.find_one({"no": no})
        print(obj)

    def write(self, data):
        data["writedate"] = datetime.now()
        self.collection.insert_one(data)

    def remove(self, no):
        self.collection.delete_one({"no": no})

    def updateBoard(self, no, title):
        query = {"no": no}
        update_title = {"$set": {"title": title}}
        self.collection.update_one(query, update_title)

    def search(self, search_string):
        query = {"$or": [{"title": {"$regex": search_string}}, {"content": {"$regex": search_string}}]}
        objs = self.collection.find(query)
        for obj in objs:
            print(obj)

    2) board_test.py

from MongoConnection import Board_Mongo

board = Board_Mongo()
board.getBoardData()  # OK
print("="*100)
board.getBoard(1) # OK
print("="*100)
board.getBoard(2) # OK
# board.write({"no": 9, "id": "id09", "title": "title09", "content": "content09", "count": 100})	#OK
# board.remove(6)   # OK
# board.updateBoard(6, "title 변경")    #OK
print("="*100)
board.search("추")   # OK

 

- 끝 -

728x90