본문 바로가기
개발 이야기/Python

Python_mongoengine 사용

by 농개 2018. 11. 10.

mongodb 익히려고 python프로젝트에 한번 써보았다.

pymongo가 좀 인기 있는거 같은데 mongoengine을 한번 써보자. 더 쓰기 간편한 것 같기도하고...


https://github.com/MongoEngine/mongoengine


위의 사이트 접속해보면  Object-Document-Mapper 라는게 눈에 띈다.

ORM을 쉽게 적용할 수 있게 해주는 파이선 모듈 같았다. 일단 한번 써보도록하장!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
from mongoengine import *
from datetime import datetime
from .. import config
 
connect('connect1', host='mongodb://' + config['mongodb_host'+ ':' + config['mongodb_port'+ '/' + config['mongodb_name'])
 
class Board(Document):
    title = StringField(required=True, max_length=200)
    contents = StringField(required=True, max_length=3000)
    writer = StringField(required=True, max_length=100)
    date = DateTimeField(default=datetime.utcnow)
    tags = ListField(StringField(max_length=50))
    meta = {'allow_inheritance': True}
 
cs



게시판 Document 스키마를 위 같이 만들었다.(mongodb는 미리 db 계정만 만들어놓고 collection은 따로만들필요없다. 왜냐하면 첫 데이터 insert하게 되면 자동으로 collection이 없으면 생성해준다.)

위에서 config는 설정파일에 써둔 db host와 port(27017번) db명을 그냥 저렇게 불러와서 사용해봤다..(__)



그런 다음 쟤를 사용할 라우터 함수에 코드를 추가해보자



1
2
3
4
5
6
7
8
9
from ..board import Board
 
@blueprint.route('/form', methods=['POST'])
def form_post():
  post = Board(writer=request.form['writer']
            , title=request.form['title']
            , contents=request.form['contents']
            )
  post.save()
cs



Board 클래스를 임포트해와서 그냥 저렇게 써주면 된다. (개간단하네)


form 데이타 저런식으로 이름 맞추고 submit하니깐...




잘들어 간걸 확인 할 수 있다...



list를 조회 하고 싶다면



1
2
3
4
@blueprint.route('/')
def index():
 
  return render_template('board/list.html', collection=Board.objects)
cs


앞서 임포트한 모듈에서 .objects 하면 모두 불러와진다.