[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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
437 [Python 인터넷] Using a Python HTTP Proxy Server to Simulate an API Gateway file 졸리운_곰 2023.03.11 366
436 [python][Django] [개념] Django는 Web Server가 아니라구요!! file 졸리운_곰 2023.03.11 464
435 [python][Django] [Django] Django Rest Framework에서 request 로깅하기 졸리운_곰 2023.03.11 381
434 [python][Django] Django REST Framework 졸리운_곰 2023.03.10 486
433 [python][Django] Django의 기본 개념 file 졸리운_곰 2023.03.10 473
432 [Python 인터넷] Django REST API 서버 만들기 file 졸리운_곰 2023.03.09 305
431 [Python 인터넷] django REST framework로 간단한 api 만들기 file 졸리운_곰 2023.03.08 489
430 [Python 인터넷] Quickstart - Django REST framework 졸리운_곰 2023.03.08 314
429 [python][자료구조] [MongoDB] Document Query(조회) – find() 메소드 졸리운_곰 2023.03.08 315
» [python][자료구조] Python(flask)으로 mongoDB 제어하기 – pymongo file 졸리운_곰 2023.03.08 604
427 [python, tkinter] [python/GUI] tkinter 로 GUI 만들기(기초예제, 단위 변환기 만들기) file 졸리운_곰 2023.03.07 326
426 [Python 인터넷] 세상에서 가장 간단한 Airflow 튜토리얼 file 졸리운_곰 2023.03.05 316
425 [Python 인터넷] Flask 또는 Django를 Production 서버로 배포(Deploy)하기 file 졸리운_곰 2023.03.03 331
424 [Python 인터넷] django 웹사이트 배포를 하며 겪은 시행착오 졸리운_곰 2023.03.03 282
423 [Python 인터넷] Windows에서 Django와 Apache 연동하기 졸리운_곰 2023.03.02 342
422 [python][자료구조] django sqlite3 MySQL로 전환하기 file 졸리운_곰 2023.03.02 409
421 [python][자료구조] django에서 db.sqlite3 데이터를 mysql로 옮기기 졸리운_곰 2023.03.02 427
420 [python][자료구조] Python - JSON 파일 읽고 쓰는 방법 졸리운_곰 2023.02.04 480
419 [python][자료구조] [인코딩] 유니코드 인코딩 처리 (특히 json 입출력 시) 졸리운_곰 2023.02.04 363
418 [Python 인터넷] 구글로 공부하는 파이썬 - 부록 (IIS, Apache 로 Flask 돌리기) file 졸리운_곰 2023.01.26 438
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED