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})
是不是很简单。