如何使用蓝图 MySQL w/o SQLAlchemy 修复 Flask 项目中的循环导入?

How to fix circular import in Flask project using blueprints MySQL w/o SQLAlchemy?

所以我有主 .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。有人知道如何解决吗?

感谢您的帮助,对不起我的英语。

这里一个相当典型的模式是使用第三个模块,您可以在其中初始化 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....

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