如何在蓝图中使用flask_mysqldb

时间:2019-12-24 17:19:16

标签: python flask

我正在使用带有蓝图的flask_mysqldb,我想初始化MySQL,但出现错误:

  

app.config.setdefault('MYSQL_HOST','localhost')AttributeError:   “蓝图”对象没有属性“ config”

在这里我创建应用程序

from flask import Flask
from flask_cors import CORS
from .bodega import bodega


def create_app():
    app = Flask(__name__)
    cors = CORS(app, resources=r'/*')

    app.config['MYSQL_HOST'] = "localhost"
    app.config['MYSQL_USER'] = "root"  # Usuario de la base de datos
    app.config['MYSQL_PASSWORD'] = ""  # Contraseña de la base de datos
    app.config['MYSQL_DB'] = "inventario_bodega"  # Nombre de la base de datos
    app.config['SECRET_KEY'] = 'thisisthesecrectkey_de_uepc_2019'
    # app.config.from_object(Config)

    app.register_blueprint(bodega)

    return app

那是我的蓝图

from flask import Blueprint
bodega = Blueprint("bodega", __name__, url_prefix="/bodega")
from . import views

在这里我想使用MySQL

from flask import jsonify
from datetime import datetime

from . import bodega
from flask_mysqldb import MySQL

# the error is here
mysql = MySQL(bodega)


@bodega.route('/show', methods=['GET'])
def show_bodega():
    try:
        cur = mysql.connection.cursor()
        cur.execute(
            """SELECT * FROM bodega 
            join item on bodega.id_item = item.id_item 
            join usuarios on bodega.id_usuario = usuarios.id_usuario 
            join images on bodega.id_image = images.id_image"""
        )
        data = cur.fetchall()
        cur.close()
        return jsonify(data), 202
    except:
        return "Error al extraer datos", 500

应用程序要求我将配置传递给蓝图,但我不知道如何

2 个答案:

答案 0 :(得分:0)

问题在以下一行

mysql = MySQL(bodega)

相反,您应该将应用传递给MySQL

app = create_app()
mysql = MySQL(app)

如需更多考虑,请阅读文档:https://flask-mysqldb.readthedocs.io/en/latest/

答案 1 :(得分:0)

这个图书馆对我来说似乎已经死了。 github repo上几乎没有任何活动,而所有这些活动都将由flask-sqlalchemy覆盖。


您不想初始化蓝图中的数据库连接。您希望在应用程序工厂中使用它。

from flask import Flask
from flask_cors import CORS
from .bodega import bodega

from flask_mysqldb import MySQL # Add the import in __init__

db = MySQL()


def create_app():
    app = Flask(__name__)
    cors = CORS(app, resources=r'/*')

    app.config['MYSQL_HOST'] = "localhost"
    app.config['MYSQL_USER'] = "root"
    app.config['MYSQL_PASSWORD'] = ""
    app.config['MYSQL_DB'] = "inventario_bodega"
    app.config['SECRET_KEY'] = 'thisisthesecrectkey_de_uepc_2019'

    db.init_app(app) # Initialise with the new app

    app.register_blueprint(bodega)

    return app

然后将数据库(db)导入到您的蓝图中

from flask import jsonify
from datetime import datetime

from . import bodega
from flask_mysqldb import MySQL

from app import db # Import from app here


@bodega.route('/show', methods=['GET'])
def show_bodega():
    try:
        cur = db.connection.cursor() # create a cursor
        cur.execute(
            """SELECT * FROM bodega 
            join item on bodega.id_item = item.id_item 
            join usuarios on bodega.id_usuario = usuarios.id_usuario 
            join images on bodega.id_image = images.id_image"""
        )
        data = cur.fetchall()
        cur.close()
        return jsonify(data), 202
    except:
        return "Error al extraer datos", 500