[python][자료구조] Python(flask)으로 mongoDB 제어하기 – pymongo

Python 2021. 7. 6. 14:26

해당 글을 작성하기 앞서 NoSQL에 대한 언급이 단 한번도 없었다. 따라서 RDBMS와 NoSQL의 차이를 간단하게 언급하고 pymongo를 통한 mongoDB 제어방법을 알아보자.

What is NoSQL

일단 NoSQL이 무엇의 약자인지 확인을 하자. 현재 Not Only SQL, None-Relational Operational Database SQL로 의견이 엇갈린다 하지만 Not Only SQL로 풀어 설명하는 것이 다수를 차지한다.
기존 RDBMS가 갖고있는 특성 뿐 아니라 다른 특성을 부가적으로 제공함으로써 기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 Database인 것을 알 수 있다.

기존 RDBMS와 NoSQL의 차이점을 말 하자면
– 관계형 모델을 사용하지 않고 JOIN 기능을 제공하지 않는다.
– 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 DB를 구성한다.
– 대부분 Open Source로 제공한다.
– 고정된 Schema가 존재하지 않는다.

위 특징을 통해 판단하기에 NoSQL은 비정형 데이터 수집 및 가공을 위한 저장용도로 특히나 용이하다.

So mongo is…

우리가 사용할 mongoDB역시 NoSQL이다. 

 

 

필자는 Docker의 Mongo image를 통해 환경을 구성했다.

나는 간단하게 RDBMS 에서 사용되던 개념을 MongoDB에 매핑하여 설명할 것이다 먼저
Database안에 기존에는 Table이 있었으면 NoSQL안에는 Collection이 있다.
그리고 Table 아래 Tuple/Row가 있었다면 MongoDB에는 Document가 있다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

이제 Document가 뭔지 알아보자!

{ 
    "_id" : ObjectId("5f5df3e885f820e8b6d6aab2"),
    "username" : "5linesys", 
    "name" : { "first" : "S.S.", "last" : "O" } 
}

일단 보자 그냥 JSON 같이 생기지 않았는가? 반가워하고 알던 대로 이해하면 된다. 
key, value로 구성되어있다. 그리고 _id는 12byte의 hexadecimal이다. 해당 id를 통해 uniqueness를 제공한다. Document를 보니 Document의 집합인 Collection에 과연 Schema가 존재할 것 같은가? 역시나 Collection에 Schema가 없으며 Document는 Dynamic한 Schema를 갖고 있다고 할 수 있다.

마지막으로 굳이 별도로 mongo는 Database, Collection을 생성하고 Document를 넣을 필요 없이 그냥 사용하고 싶은 Database명을 use명령어를 통해 전환하고 해당 DB에서 어떤 Collection에 Document를 삽입한다면 DB, Collection, Document까지 한번에 생성된다 이미 존재하는 DB와 Collection이라면 따로 생성하지 않고 기존에 존재하는 것을 이용한다.

Now, We can use pymongo

이제 우리는 pymongo를 설치하고 사용할 것이다. 기반이 되는 내용은 위에서 이미 언급하였다. 설치는 아래 명령어를 통해 가능하다.

$ pip install pymongo

아래는 flask를 통해 http API를 만들어 Get method로 받은 인자를 DB에 저장하는 코드이다.

from flask import Flask, jsonify, request
from pymongo import MongoClient

# db 연동
conn = MongoClient('127.0.0.1')

# db 생성
db = conn.gps_saver

# collection 생성
collect = db.data

app = Flask(__name__)


@app.route('/', methods=['GET'])
def list_library():
name = request.args.get('Name')
lat = request.args.get('Lat')
lon = request.args.get('Lon')
time = request.args.get('Time')

# document 생성
doc = {
"Name": name,
"Lat" : lat,
"Lon" : lon,
"Time" : time
}
# document 삽입
collect.insert(doc)

return jsonify({"code": 0, "msg": "Storage completed"})


if __name__ == '__main__':
app.run()

마음이 미워질 정도로 간단하다… 이제 그냥 개발로 밥벌어 먹는게 어려울 것 같다 GCP로 서버 구성하고 Docker로 환경구성하고 flask와 pymongo의 조합으로 간단하게 필요한 정보를 저장하는 API 및 서버 구성까지 한시간도 안걸리게 할 수 있다.

마지막.. 종합선물세트 이것만 봐도 됨

# Document 삭제
# db.collction.remove() -> collect.remove()
collect.remove({'name': '5linesys'})

# Document 수정 
# db.collection.update -> collect.update()
myquery = {'name': 'linesys'}
newvalues = { '$set': { 'name': '5linesys'}}
collect.update(myquery, newvalues)

# 전체 Document 조회
result = collect.find()
for docs in result :
    print(docs)

# 특정 Document 조회
result = collect.find({'name': '5linesys'})

조회는 여기 참고하는게 더 좋을 것 같음

[출처] https://blog.oseonsik.com/18

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
57 [python 인공지능] Deploy ML models with FastAPI, Docker, and Heroku | Tutorial 졸리운_곰 2025.07.08 467
56 [python 인공지능] [VSCode] VSCode에서 ipynb 파일을 HTML(PDF 등..)로 졸리운_곰 2025.05.27 289
55 [Python 인공지능] [파이썬을 이용한 한글 NLP] 03. 간단한 키워드 추출기 졸리운_곰 2025.01.29 459
54 [Python 인공지능] [ 한글 키워드 시각화 ] 파이썬 python 텍스트 마이닝 한글 ( 워드 클라우드 WordCloud, squrify 트리맵으로 빅데이터 마스터) file 졸리운_곰 2025.01.29 398
53 [Python 인공지능] 기계 학습의 A to Z : IPython notebook과 scikit-learn을 활용한 기계 학습 file 졸리운_곰 2024.08.10 523
52 [python] 인공지능 python : 한글 문서 자동 요약 - lexrank 졸리운_곰 2023.07.06 404
51 [python] 인공지능 katiehouse / django-scikit-learn-tutorial file 졸리운_곰 2023.06.03 664
50 [python] [Anaconda]가상환경 설치,삭제 file 졸리운_곰 2022.12.03 405
49 [python][머신러닝] Scikit-learn Tutorial: Machine Learning in Python file 졸리운_곰 2022.11.29 497
48 [python] 파이썬(sklearn) 사이킷런(sklearn) 기초 졸리운_곰 2022.08.20 321
47 [python] scikit-learn이란 file 졸리운_곰 2022.08.20 455
46 [anaconde3][python] Create environment for tensorflow 1.4 in Anaconda 3 졸리운_곰 2022.07.02 563
45 [python][인공지능] [TensorFlow] Anaconda 가상환경 이용하여 TensorFlow GPU 설치 졸리운_곰 2022.01.20 438
44 [Python 인공지능] TextRank 를 이용한 키워드 추출과 핵심 문장 추출 (구현과 실험) file 졸리운_곰 2021.11.22 597
43 [python][인공지능] FLASK를 이용하여 PYTHON에서 PYTORCH를 REST API로 배포하기 졸리운_곰 2021.03.20 364
42 [python 파이썬] Creating REST API for TensorFlow models file 졸리운_곰 2021.02.01 488
41 [python 파이썬 인공지능] Keras 모델을 REST API로 배포해보기 file 졸리운_곰 2021.02.01 411
40 [파이썬 머신러닝] Scikit-learn 기초 졸리운_곰 2020.01.31 579
39 파이썬으로 간단한 뉴럴 네트워크 만들기 How to Create a Simple Neural Network in Python file 졸리운_곰 2020.01.29 22636
38 Keras를 활용한 주식 가격 예측 file 졸리운_곰 2019.02.25 983
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED