[英]How to use flask_mysqldb with blueprint
我正在使用帶有藍圖的flask_mysqldb,我想初始化MySQL,但出現錯誤:
app.config.setdefault('MYSQL_HOST', 'localhost') AttributeError: 'Blueprint' 對象沒有屬性 '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
應用程序要求我將配置傳遞給藍圖,但我不知道如何
問題出在以下行
mysql = MySQL(bodega)
相反,您應該將應用程序傳遞給MySQL
app = create_app()
mysql = MySQL(app)
更多考慮,閱讀文檔: https : //flask-mysqldb.readthedocs.io/en/latest/
這個圖書館在我看來幾乎死了。 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.