Python Flask串接MongoDB做數據讀取與寫入


我一直以來都有一個想法是「如何把一整個系統給建立起來」,這個想法一直存在我的心裡,加上工作上一直會接觸到這些東西,促使我一步一步要去了解它,不過這涉及到的知識和技術非常多,打算開始將它拆解成小部分來學習。

近期參加公司內部所舉辦的黑客松比賽,其中我們所建立的系統就是由 MongoDB 做為後端資料庫使用,所以之前就已經開始學習使用Python將CSV數據寫入到MongoDB,這篇文章主要是紀錄了該如何透過 Python 來寫入數據到資料庫裡。
今天的內容就是希望不要透過 Python 來執行,而是中間透過一個 API Server 來做服務上的串接。

在開始之前,先了解一下 Flask 是一個什麼樣的工具。

不囉嗦,直接看一個最基本的範例程式碼:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == "__main__":
    app.run(debug=True)
  • app = Flask(__name__) 用於初始化 Flask 物件,然後存到 app 變數裡,之後就可以透過這項變數來呼叫其他的功能。
  • "@app.route("/")" 用於建立主網域底下的網址,如果你起的伺服器是地端的就會是 localhost:5000,"/" 也是代表 localhost:5000的意思。
這時候在 "/" 後面加上 "/hello" 的話,就會變成 localhost:5000/hello 的網址。

你同時也可以設定使用者對於這個 route 的 mothods,可以是 POST 或 GET 抑或是其他,設定方法如下:

@app.route("/hello", methods=['GET'])
def hello_world():
    return "<p>Hello, World!</p>"

這樣設定好以後,你就可以在瀏覽器中輸入 localhost:5000/hello,畫面中就會看到 Hello world! 的字樣。

讀取 MongoDB 數據

只需要將 Flask 結合 pymongo 即可。

from flask import Flask, jsonify 
from flask_cors import CORS 
import pymongo 

app = Flask(__name__) 
CORS(app) 

@app.route('/') 
def wellcome(): 
    return '<html><body><h1>Hello World</h1></body></html>' 

@app.route('/test') 
def test_function(): 
    client = pymongo.MongoClient('mongodb://localhost:27017/') 
    db = client['personal_goal'] 
    col = db['2022'] 
    data = col.find() 
    all_members = {'all_members': []} 
    for people in data: 
        all_members['all_members'].append(people['name']) 
    return jsonify(all_members)

如果你想要撈取整個資料庫所有數據,需要透過這項程式碼來完成:

#db.collection.find(查詢條件)
data = col.find({})

中間的{}是不設查詢條件的意思,應該會看到一筆剛剛新增的資料,其中 _id 是 MongoDB 自動產生的 ID,每一筆資料(document)都會產生一個獨一無二的 ID。

此時你的數據庫裡面需要有幾筆的數據,你才能夠過 api 正確撈到數據,即便沒有數據,也會回傳一個空值。



檢驗的方式,可以透過瀏覽器來查看,只需要在網址列輸入 localhost:5000/test 即可。


閱讀更多

張貼留言

較新的 較舊