【问题标题】:raise ValueError("Deserialization requires a session")raise ValueError("反序列化需要一个会话")
【发布时间】:2020-04-27 13:43:36
【问题描述】:

确实是我正在处理的一个非常奇怪的错误。奇怪的是,当我在 pyCharm 的 localhost 上运行同一个项目时,它运行良好,但是,当我将所有文件上传到 EC2 服务器时。我收到以下错误。

项目运行良好,因此我可以托管应用程序,但是当我发送发布请求时,我收到 HTTP ERROR CODE 500 作为响应并在控制台中出现以下错误。

如果有人可以帮助我纠正这个问题,我将不胜感激

    Traceback (most recent call last):
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 2464, in __cal                                                                                                l__
    return self.wsgi_app(environ, start_response)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 2450, in wsgi_                                                                                                app
    response = self.handle_exception(e)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask_restful/__init__.py", line 2                                                                                                72, in error_router
    return original_handler(e)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 1867, in handl                                                                                                e_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/_compat.py", line 38, in rer                                                                                                aise
    raise value.with_traceback(tb)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_                                                                                                app
    response = self.full_dispatch_request()
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 1952, in full_                                                                                                dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask_restful/__init__.py", line 2                                                                                                72, in error_router
    return original_handler(e)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 1821, in handl                                                                                                e_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/_compat.py", line 38, in rer                                                                                                aise
    raise value.with_traceback(tb)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 1950, in full_                                                                                                dispatch_request
    rv = self.dispatch_request()
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/app.py", line 1936, in dispa                                                                                                tch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask_restful/__init__.py", line 4                                                                                                68, in wrapper
    resp = resource(*args, **kwargs)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask/views.py", line 89, in view
    return self.dispatch_request(*args, **kwargs)
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/flask_restful/__init__.py", line 5                                                                                                83, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/home/ubuntu/yAPI/resources/r_user.py", line 50, in post
    user = user_schema.load(request.get_json())
  File "/home/ubuntu/yAPI/yenv/lib/python3.6/site-packages/marshmallow_sqlalchemy/schema/load                                                                                                _instance_mixin.py", line 89, in load
    raise ValueError("Deserialization requires a session")
ValueError: Deserialization requires a session

在我的应用程序中,这是错误开始的地方。

class UserRegister(Resource):

    @classmethod
    def post(cls):
        #        the 'load' function in marshmallow will use the data to create usermodel object
        user = user_schema.load(request.get_json())

【问题讨论】:

  • 检查服务器和机器上sqlalchemy-marshmallow的版本?
  • 我做了,两者都匹配。完全相同的。这是我的包列表-- [packages] flask = "" flask-restful = "" flask-jwt-extended = "" flask-sqlalchemy = "" marshmallow = “==3.5.1”烧瓶-棉花糖=“==0.11.0”棉花糖-sqlalchemy=“==0.22.3”请求=“”python-dotenv=“”烧瓶上传= "*" werkzeug = "==0.16.1"
  • 尝试使用以下代码创建sessionfrom sqlalchemy.orm import scoped_session, sessionmaker; sess = scoped_session(sessionmaker(bind=engine))。然后,像这样user = user_schema.load(request.get_json(), sess) 加载您的数据
  • 我会尽力让你知道的。顺便说一句,什么是引擎?在给定的导入中似乎找不到引擎。
  • 尝试不使用engine,如下所示:sessionmaker()

标签: python flask flask-sqlalchemy flask-marshmallow


【解决方案1】:

正如 cmets 中所讨论的,这里是解决方案,因此它可以对其他人有所帮助:

您需要定义一个会话并将其传递给加载函数,如下所示:

from sqlalchemy import engine #thanks to your comment
from sqlalchemy.orm import scoped_session, sessionmaker



class UserRegister(Resource):

    @classmethod
    def post(cls):
        #        the 'load' function in marshmallow will use the data to create usermodel object
        sess = scoped_session(sessionmaker(bind=engine))
        user = user_schema.load(request.get_json(), sess)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2013-10-05
    • 1970-01-01
    • 2020-04-04
    • 2014-12-12
    • 2016-12-21
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多