Python-flask MySQL配置
最近在實習做公司的一個小項目,麻雀雖小,五臟俱全。雖然我投的是算法崗位,但剛進來讓我做後臺服務器,讓我感覺壓力還是蠻大的。我開發的服務器是用python-flask來做的,flask在這段時間開發中,讓我學習到了很多,終於理解微小的含義。
場景1
flask默認只有一個run.py
文件,如果現在沒有功能還不完善,我想後期擴充功能,但又不想修改run.py
文件,該怎麼辦?
答:使用藍圖。
藍圖的的定義是這樣的,可以將不同的模塊獨立分開,採用不同的路由,這樣就可以模塊化應用。
配置如下:
首先藍圖模塊bp.py:
from flask import Blueprint, jsonify
bp = Blueprint('mysql', __name__, url_prefix='/db')
@bp.route('/index')
def index():
return 'blueprint model'
這樣我們就定義了一個基本的藍圖。首先我們引入Blueprint這個模塊,並且實例化,第一個是名稱,url_prefix='/db'
表示路由選擇從db開始,下面就像普通的app文件一樣,定義路由方法即可。
我們看一下run.py:
from flask import Flask
from bp import bp
app = Flask(__name__)
app.register_blueprint(bp)
if __name__ == '__main__':
app.run(debug=True)
運行,用瀏覽器打開localhost:5000/db/index
,就可以看到blueprint model
兩個字母了。簡單吧。
場景2
我的應用需要操作數據庫,我才用了flask-mysql的擴展,但我想模塊化,不想在run.py中操作數據庫。
答:
我們可以這樣,編寫一個ext.py
,
from flaskext.mysql import MySQL
mysql = MySQL()
接着在run.py
中這樣:
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'sa'
app.config['MYSQL_DATABASE_DB'] = 'zhihu'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
接着在ext.py
中操作數據庫了:
def db():
cursor = mysql.get_db().cursor()
cursor.execute('select * from users limit 5')
data = cursor.fetchall()
for d in data:
print(d[3], SEX[d[4]])
return jsonify({'code': 200})
是不是很簡單。