【问题标题】:Working outside of request context. Flask, SqlAlchemy在请求上下文之外工作。烧瓶,SqlAlchemy
【发布时间】:2021-03-08 19:16:32
【问题描述】:

我正在使用 Flask 和 SqlAlchemy,情况是我有一个主数据库,然后我有几个数据库可以获取其他信息。但是凭据没有定义为固定的,因此我必须从主数据库中的表中获取它们,具体取决于用户所在的工厂。为此,我使用 SQLALCHEMY_BINDS。问题是,当我尝试将连接字符串传递给 Bind 时,我告诉自己返回它的函数脱离了上下文。这里是部分代码

def scadaConnect():
    idplanta_session=str(session['idPlanta'])
    usernamequery = db.session.query(Scada.usernameScada).filter(Scada.idPlanta=='5')
    hostquery = db.session.query(Scada.hostScada).filter(Scada.idPlanta=='5')
    passwordquery = db.session.query(Scada.passScada).filter(Scada.idPlanta=='5')
    nombredbquery = db.session.query(Scada.nombrebdScada).filter(Scada.idPlanta=='5')
    nombredb = str(nombredbquery[0])[2:len(nombredbquery[0])-4]
    host = str(hostquery[0])[2:len(hostquery[0])-4]
    password = str(passwordquery[0])[2:len(passwordquery[0])-4]
    username = str(usernamequery[0])[2:len(usernamequery[0])-4]
    connexion = 'mysql+pymysql://'+username+":"+password+"@"+host+"/"+nombredb+"'"
    def retorno():
        return str(connexion)    


from config import SQLALCHEMY_BINDS

SQLALCHEMY_BINDS['scada']= scadaConnect()

报错如下

RuntimeError:在请求上下文之外工作。

这通常意味着您尝试使用需要活动 HTTP 请求的功能。有关如何避免此问题的信息,请参阅测试文档。

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy


    【解决方案1】:

    sessionscadaConnect() 中的第一行)仅在请求上下文(又名视图)中可用。它存在于客户端的会话 cookie 中,只有在浏览器发出请求时才会发送到服务器(并且对您的视图可用)。

    如果您想使用session,则必须将对scadaConnect() 的调用移至视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多