Python 使用Flask SQLAlchemy反射表会引发运行时错误:应用程序未注册
我有一个SQLite数据库来管理用户登录,还有一个现有的MySQL数据库。我将MySQL数据库添加到Flask SQLAlchemyPython 使用Flask SQLAlchemy反射表会引发运行时错误:应用程序未注册,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我有一个SQLite数据库来管理用户登录,还有一个现有的MySQL数据库。我将MySQL数据库添加到Flask SQLAlchemySQLAlchemy\u绑定config。当我试图反映这些表时,会出现以下错误: RuntimeError: application not registered on db instance and no application bound to current context 如何正确反映表格 \uuuu init\uuuuu.py: from flask i
SQLAlchemy\u绑定
config。当我试图反映这些表时,会出现以下错误:
RuntimeError: application not registered on db instance and no application bound to current context
如何正确反映表格
\uuuu init\uuuuu.py
:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
from myapp import create_app
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
from . import db, login_manager
db.Model.metadata.reflect(db.engine)
class Calls(db.Model):
__table__ = db.Model.metadata.tables['Calls2']
__bind_key__ = 'calls'
def __repr__(self):
return self.test1
manage.py
:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
from myapp import create_app
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
from . import db, login_manager
db.Model.metadata.reflect(db.engine)
class Calls(db.Model):
__table__ = db.Model.metadata.tables['Calls2']
__bind_key__ = 'calls'
def __repr__(self):
return self.test1
models.py
:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
from myapp import create_app
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
from . import db, login_manager
db.Model.metadata.reflect(db.engine)
class Calls(db.Model):
__table__ = db.Model.metadata.tables['Calls2']
__bind_key__ = 'calls'
def __repr__(self):
return self.test1
回溯(最近一次呼叫最后一次):
文件“/manage.py”,第6行,在
从app.models导入用户、角色、权限
文件“/home/ilias/Desktop/client reporting/app/models.py”,第9行,在
db.Model.metadata.reflect(db.engine)
文件“/home/ilias/Desktop/client reporting/local/lib/python2.7/site packages/flask\u sqlalchemy/\u_init\u_.py”,第780行,在引擎中
返回self.get\u引擎(self.get\u应用程序())
文件“/home/ilias/Desktop/client reporting/local/lib/python2.7/site packages/flask\u sqlalchemy/\u_init\u_.py”,第809行,在get\u应用程序中
raise RUNTIMERROR('应用程序未在数据库上注册'
RuntimeError:应用程序未在db实例上注册,并且没有绑定到当前上下文的应用程序
在应用程序初始化扩展之前,您无法对数据库执行操作,这在使用应用程序工厂功能之前是不会发生的。将reflect
调用移动到工厂内,然后使用db.reflect
,它反映所有绑定,而不仅仅是主绑定
def create_app():
app = Flask(__name__)
...
db.init_app(app)
db.reflect(app=app)
# you could also push an app context instead of passing app
# with app.app_context():
# db.reflect()
...
return app
由于模型作为视图的一部分导入,而视图仅在工厂内部导入,因此在定义模型时,元数据将包含反映的表