Web 관련/Flask

플라스크(Flask) #3_ 플라스크에서 MongoDB 연결(연동)하기

Tigercow.Door 2017. 11. 10. 22:45


안녕하세요.

이번 포스팅에서는 Flask에서 MongoDB에 연결하여 데이터를 사용할 수 있도록,

MongoDB에 연결하는 방법을 알아보도록 하겠습니다.

궁금한 점은 언제나 댓글을 이용해주세요 :)


1. 사전작업

1-1. pymongo 설치하기


먼저 Flask와 MongoDB, python 설치는 모두 되어있다고 생각하겠습니다.

( Flask 설치방법 클릭, MongoDB 설치방법 클릭, python 설치방법 클릭 )


CMD창을 열어서 아래 명령어를 입력합니다.

pip install pymongo



위의 사진과 같이 간단하게 설치가 됩니다.



1-2. MongoDB에 데이터 작성하기


이후 flask를 통해 MongoDB에 있는 데이터를 확인하기 위해 간단한 mock-up 데이터를 작성합니다. 

아래 사진과 같이 간단하게 이름과 content를 가진 document가 3개 존재하는 collection을 구성하였습니다.

해당 데이터베이스의 이름은 newDatabase이며 collection의 이름은 mongoTest 입니다.

플라스크에서 mongoDB에 접속할때 필요하므로 알아 두도록 합니다.




2. 플라스크(flask) 코드 작성하기


이제, 플라스크에서 MongoDB에 접속할 수 있도록 코드를 작성해보도록 하겠습니다.


2-1. hello.py


저는 hello.py제목의 파일로 진행하겠습니다. 

지난 포스팅에 만들었던 코드에 아래와 같은 코드를 추가합니다.


1
2
3
4
5
6
7
8
9
10
from pymongo import MongoClient
## 
@app.route('/mongo',methods=['POST'])
def mongoTest():
    client = MongoClient('mongodb://localhost:27017/')
    db = client.newDatabase
    collection = db.mongoTest
    results = collection.find()
    client.close()
    return render_template('mongo.html', data=results)
cs


먼저 1번라인을 통해 pymongo 모듈을 사용합니다. 

3번 라인을 보시면 '/mongo' 경로를 POST방식으로 설정해주었고 

mongoTest라는 함수를 정의하였습니다.

이제, 5번라인부터 본격적으로 MongoDB에 접속하는 과정입니다.

5번 라인을 통해 MongoDB에 접속합니다. 만약 mongoDB에 아이디 및 패스워드가 존재하시는 분께서는

client = MongoClient('mongodb://ID:PASSWORD@localhost:27017/')

라는 코드를 입력하며 ID 부분에 아이디를 PASSWORD부분에 패스워드를 입력하시면 됩니다.

그리고 6번 라인에서는 client.DATABASE_NAME 을 입력하고 이를 db라는 변수로 받습니다.

또한 7번 라인에서는 비슷한 방식으로, db.COLLECTION_NAME 을 입력하고 collection 이라는 변수로 받습니다.

그리고 collection.find()를 통해 내부 documents를 확인하고 이를 results 라는 변수로 받습니다.

그리고 9번라인을 통해 접속을 닫고, 10번라인에서 results 값을 전달해주며 템플릿을 렌더링합니다.



2-2. mongo.html


위에서 렌더링 되는 html 파일을 살펴보도록 하겠습니다. 먼저 코드는 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>#3_ MongoDB와 연결하기</h1>
    <div>
        <p>연결이 성공되면 아래에 데이터가 뜰꺼야!</p>
        <p>------------------------------------</p>
        {% for i in data %}
            <p>이름: {{i.name}}</p>
            <p>내용: {{i.content}}</p>
            <p>---------------</p>
        {% endfor %}
    </div>
</body>
</html>
cs


11번 라인부터 15번 라인에서 for문을 통해 data를 출력합니다.

각 documents들은 배열로 반환됩니다. 따라서 data[0].name 은 "범우"라는 값일 것 입니다.


이러한 코드를 통해 아래와 같은 결과를 확인할 수 있습니다.






각각의 코드의 전문은 아래에서 확인하실 수 있으며, 지난 포스트에서 진행했던 구구단 출력코드도 포함되어 있으니 지난 포스트를 참고하시거나 코드를 제외하고 확인하시면 되겠습니다.





이렇게 해서 플라스크에서 mongoDB에 연결하는 방법을 알아보았습니다.

다음 포스팅에서는 웹에서 mongoDB에 documents를 추가하거나 삭제하는 기능을 구현해보겠습니다.

728x90