如何在具有 Redis 排队作业的 Flask 应用程序中使用 PostgreSQL 和 SQLAlchemy

问题描述

当直接在 Flask 应用程序中的 API 调用上使用 sqlAlchemy 执行 sql 查询时,它们会成功执行,但是当我尝试在使用 Redis 作业队列执行的函数中执行一个查询时,我收到以下错误RuntimeError: No application found. Either work inside a view function or push an application context.函数存储在单独的文件中,而不是 app.py

我的app.py

app = Flask(__name__)
app.secret_key = os.environ.get('FLASK_SECRET_KEY')

worker_queue = Queue('default',connection=conn)
worker_registry = StartedJobRegistry(queue=worker_queue)

# database configuration
setup_db(app)

在我的 models.py 中,setup_db 如下所示:

db = sqlAlchemy()


def setup_db(app):
    database_name = 'dev'
    default_database_path = "postgresql://{}:{}@{}/{}".format('postgres','password','localhost:5432',database_name)
    database_path = os.getenv('DATABASE_URL',default_database_path)
    app.config['sqlALCHEMY_DATABASE_URI'] = database_path
    app.config['sqlALCHEMY_TRACK_MODIFICATIONS'] = False
    db.app = app
    db.init_app(app)

然后在我调用的作业排队时触发的函数中:

users = User.query.all()

其中 User 是我在 models.py 中定义的数据库模型。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)