所以我有一个主.py
文件,其中创建并配置了Flask应用程序对象,并初始化了MySQL。然后我想注册一些蓝图。
from flask import Flask
from flaskext.mysql import MySQL
app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
from views1 import views1_blprnt
app.register_blueprint(views1_blprnt)
但在views1.py
我需要MySQL对象来获取连接和游标对象来执行查询。当然,当我尝试导入它时,我得到ImportError
。我已经阅读了一些类似的问题和解决方法,但所有这些都使用了SQLAlchemy。有人有任何想法如何解决它?
感谢您的帮助,对不起我的英语。
答案 0 :(得分:14)
这里一个相当典型的模式是使用第三个模块,在其中初始化mysql以及要在蓝图中共享的任何其他资源。
我注意到人们倾向于将其称为extensions.py。所以你可以在extension.py中执行类似的操作:
from flaskext.mysql import MySQL
mysql = MySQL()
在你的main.py中,有这样的东西:
from extensions import mysql
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
您可以从所有蓝图中访问已初始化的mysql实例,如下所示:
from extensions import mysql
mysql....
还有其他解决方案,但这是我最常看到的。这也是我通常做的事情。