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

时间:2015-02-28 17:43:36

标签: 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)

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

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

1 个答案:

答案 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....

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