如何使用蓝图 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....
还有其他解决方案,但这是我最常看到的解决方案。这也是我通常做的。
所以我有主 .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....
还有其他解决方案,但这是我最常看到的解决方案。这也是我通常做的。