如何使用蓝图MySQL没有SQLAlchemy来修复Flask项目中的循环导入?

ora*_*nge 3 python mysql flask

所以我有主.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)
Run Code Online (Sandbox Code Playgroud)

但是views1.py我需要MySQL对象来获取连接和游标对象来执行查询.当然,当我尝试导入它时,我得到了ImportError.我已经阅读了一些类似的问题和解决方法,但所有这些都使用了SQLAlchemy.有人有任何想法如何解决它?

谢谢你的帮助,对不起我的英语.

Rob*_*kal 14

这里一个相当典型的模式是使用第三个模块,在其中初始化mysql以及要在蓝图中共享的任何其他资源.

我注意到人们倾向于称它为extensions.py.所以你可以在extension.py中做类似的事情:

from flaskext.mysql import MySQL  

mysql = MySQL()
Run Code Online (Sandbox Code Playgroud)

在你的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)
Run Code Online (Sandbox Code Playgroud)

您可以从所有蓝图中访问初始化的mysql实例,如下所示:

 from extensions import mysql

 mysql....
Run Code Online (Sandbox Code Playgroud)

还有其他解决方案,但这是我最常看到的.这也是我通常做的事情.