我有一个像这样的应用工厂
db = SQLAlchemy()
def create_app(environment):
app = Flask(__name__)
app.config.from_object(config[environment])
db.init_app(app)
# ... etc
return app
然后,我有一个脚本,它在应用程序的上下文之外提取CSV。这个脚本是一个每x小时运行一次的cron
我想以某种方式更新sqlite数据库应用程序正在使用。这可能吗?
答案 0 :(得分:11)
Flask-SQLAlchemy只需要一个应用程序上下文来运行。您可以手动创建应用程序上下文。
app = create_app(env)
ctx = app.app_context()
ctx.push()
# your code here
ctx.pop()
答案 1 :(得分:8)
我知道此问题已得到解答,但您也可以使用with
声明:
from my_package import create_app
app = create_app(my_envrionment)
with app.app_context():
# your code here
我认为这看起来有点清洁:)
答案 2 :(得分:3)
解决此问题的另一个优雅方法是使用@with_appcontext装饰器。
from flask.cli import with_appcontext
@click.command(name='db-init-data')
@with_appcontext
def db_init_data():
"""Init db with some data"""
admin = User(fname='John', lname='Smith', email='jsmith@google.com')
db.session.add(admin)
db.session.commit()