Flask結(jié)合MongoDB
咪哥雜談

本篇閱讀時(shí)間約為 4 分鐘。
1
前言
今天來介紹下如何將 MongoDB 與 Flask 框架結(jié)合在一起使用。忘記 MongoDB 的同學(xué)可以回顧下之前寫的文章。
2
成果展示
先來個(gè)源碼截圖:

項(xiàng)目啟動(dòng)后,直接訪問我們的 url ,讓它去查庫,age 我們傳入 24 好了,數(shù)據(jù)庫中 age = 24 的有 3 條信息。
127.0.0.1:8080/user/24
?注意觀察列出來的幾條,信息是否和后面數(shù)據(jù)庫中數(shù)據(jù)一致!
3
環(huán)境準(zhǔn)備
開始之前,先來安裝一下我們需要的第三庫。
pip install Flask-PyMongo
Flask提供了第三方插件,將 pymongo 這個(gè)庫與 Flask 整合在了一起,所以需要先安裝此插件庫。
4
場景設(shè)定
場景設(shè)定如下:
現(xiàn)在 MongoDB 數(shù)據(jù)庫里有 4 條數(shù)據(jù),分別:

分別是 4 個(gè)不同人的信息,接下來,使用 Flask 來結(jié)合 MongoDB 一起使用,通過頁面 url 傳入查詢字段,在 url 上傳入 24,讓 Flask 去 MongoDB 中查詢 age=24 的用戶信息,并顯示在頁面上。
5
代碼講解
1. HTML 涉及的代碼:
<html lang="en"><head><meta charset="UTF-8"><title>Titletitle>head><body><h1>咪哥雜談h1><hr/><h3>展示區(qū) Users:h3><ul>{% for user in users %}<li>姓名:{{ user.name }}, 年齡:{{ user.age }}, 身高:{{ user.height }}, 體重:{{ user.weight }}li>{% endfor %}ul>body>html>
通過 jinjia2 的語法,將后端 python 傳入的用戶數(shù)據(jù)分別以無序的形式打印出來。后端 flask 在向前端傳遞值時(shí),從 MongoDB 中查出的是以變量名為 users 傳到此頁面上。
遍歷每條用戶信息,將符合的用戶信息以無序的形式展現(xiàn)在網(wǎng)頁上。
2. flask 涉及的代碼:
首先,觀察下?flask結(jié)合 pymongo 的插件開啟數(shù)據(jù)庫實(shí)例,和原來直接使用 pymongo 的區(qū)別。
開啟數(shù)據(jù)庫實(shí)例對比:
Flask-PyMongo:
from flask import Flask, render_templatefrom flask_pymongo import PyMongoapp = Flask(__name__)app.config['DEBUG'] = True # 開啟 debugmongo?=?PyMongo(app,?uri="mongodb://localhost:27017/traffic")??#?開啟數(shù)據(jù)庫實(shí)例
pymongo:
import pymongoclient = pymongo.MongoClient(host='127.0.0.1') #連接
不難看出,flask的插件中,直接將數(shù)據(jù)庫的名字 traffic 作為 url 地址寫入其中,在接下來使用的時(shí)候,便可以不用去選定庫名了。
對比下查詢操作:
def query_user(age):if age:users = mongo.db.person.find({'age': age})print(type(users))print(users)if users:return render_template('user.html', users=users)else:return 'No user found!'if __name__ == "__main__":app.run(host='127.0.0.1', port=8080)
這部分代碼是通過設(shè)定路由函數(shù),當(dāng)我們訪問?/user/age 時(shí),便可以將年齡作為參數(shù)條件,去查詢數(shù)據(jù)庫中的用戶信息。
Flask-PyMongo:
users = mongo.db.person.find({'age': age})pymongo:
db?=?client.trafficcollections = db.person # 創(chuàng)建集合,student 相當(dāng)于 mysql 的表名result2 = collections.find({'age': '22'})
發(fā)現(xiàn)了吧,其實(shí)除了開啟數(shù)據(jù)庫實(shí)例的時(shí)候不同,剩下關(guān)鍵查詢時(shí)的操作都是一樣的!所以就不一一介紹了,想看具體操作可以回顧 pymongo 操作的 3 篇文章。
6
總結(jié)
網(wǎng)頁版相關(guān)教程寫到這里就結(jié)束了,所有教程都是很基礎(chǔ)的入門教程。歷時(shí)一個(gè)月,終于完成啦,關(guān)于 flask 和 mongo 的知識點(diǎn)其實(shí)很多,但是可以通過去查閱官方文檔來幫助學(xué)習(xí)。用到的時(shí)候,去查文檔就好了!
離實(shí)時(shí)交通的項(xiàng)目,就差一個(gè)如何去調(diào)用高德地圖提供的接口講解了。下篇打算寫下,如何使用 requests 庫來調(diào)用高德地圖提供的數(shù)據(jù),以便自己的項(xiàng)目使用!
今天這篇文章略短,篇幅多以代碼為例講解,大家如果有什么問題,歡迎留言區(qū)留言!


▼往期精彩回顧▼咪哥的思維認(rèn)知日記(三) - 賺錢思維
Python操作MongoDB數(shù)據(jù)庫(二)
Python操作MongoDB數(shù)據(jù)庫(一)
你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡