我很遗憾地遇到了一个问题,即使用mysql的全局数据库连接时,flask、blueprint和restful都有问题。蓝图资源究竟是如何获得全球数据库连接的?所以,如果我定义了一个全局连接到python.connector,那么我如何使用带有蓝图的数据库呢?我看不出有什么办法把我的数据库连接传递给蓝图。
注意,我没有也不能使用flask mysql-ext等。它必须是来自python连接器的纯conn,因为我使用的是fabric。
这是我的主要代码:
# views.py
from flask import Blueprint
from flask_restful import Api
from resources.register import register
from app import app
db = "This is my global mysql conn"
api_bp = Blueprint('api', __name__)
api = Api(api_bp)
api.add_resource(register, '/api/driver/register')
app.register_blueprint(api_bp)
这是我的资源:
from flask_restful import Resource
from flask import request, jsonify
class register(Resource):
def post(self):
data = request.json
partner_ref = data['ref']
partner_driver_ref = data['driver_ref']
query = """INSERT INTO %s (partner_ref,partner_driver_ref) VALUES ('%s','%s')""" % (ref,driver_ref)
db.execute_query(query,select=False,table=None,key=None)
status = {'status':'OK'}
return jsonify(status)
把数据库连接放在g
对象中怎么样?
@api_bp.before_app_request
def connect_db():
if not hasattr(g, 'db'):
g.db = db
@api_bp.teardown_app_context
def close_db():
if hasattr(g, 'db'):
# close your db connection here.
当您想要使用它时,只需使用g.db.execute_query(...)