【问题标题】:StatementError for JSON serializerJSON 序列化程序的 StatementError
【发布时间】:2019-09-08 09:19:56
【问题描述】:

这里我有简单的 rest API 端点来使用以下模型创建乘客对象,

 class PassengerModel(db.Model):

    __tablename__ = 'passenger'

    ps_id          = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ps_token_id    = db.Column(db.String(120),unique=True, nullable=False)
    passenger_name = db.Column(db.String(50),unique=True, nullable=False)
    passenger_email= db.Column(db.String(120),unique=True, nullable=False)
    prof_pic       = db.Column(db.String(120),unique=True, nullable=False)
    is_ontrip      = db.Column(db.Boolean, nullable=True)
    created        = db.Column(db.DateTime, default=datetime.datetime.utcnow,nullable=True)
    updated        = db.Column(db.DateTime,nullable=True)

resource.py 看起来像这样,


passenger_parser = reqparse.RequestParser()

passenger_parser.add_argument('ps_token_id')
passenger_parser.add_argument('passenger_name')
passenger_parser.add_argument('passenger_email')
passenger_parser.add_argument('prof_pic')
passenger_parser.add_argument('is_ontrip')
passenger_parser.add_argument('created')
passenger_parser.add_argument('updated')

class PassengerRegistration(Resource):
    def post(self):
        data = passenger_parser.parse_args()

        if PassengerModel.find_by_email(data['passenger_email']):
            return {'message': 'User {} already exists'.format(data['passenger_name'])}

        new_passenger = PassengerModel(
            ps_token_id     = data['ps_token_id'],
            passenger_name  = data['passenger_name'],
            passenger_email = data['passenger_email'],
            prof_pic        = data['prof_pic'],
            is_ontrip       = data['is_ontrip']
        )

        try:
            new_passenger.save_to_db()
            return {'message': 'passenger {} created'.format(data['passenger_name'])}
        except Exception as e:
            return {'message': 'Something went wrong', 'error': e}, 500

一旦我尝试使用邮递员创建新的乘客对象并出现以下错误,

 {
    "ps_token_id":"1@asdsd",
    "passenger_name":"vAAaA",
    "passenger_email":"vAasd@g.com",
    "prof_pic":"asdasdv",
    "is_ontrip":"False"
}

它返回此错误,

TypeError: Object of type StatementError is not JSON serializable

对于is_ontrip,我尝试过0 and 1, true, false 带大括号和不带大括号。每次都会出现上述错误。

我做错了什么?

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-restful


    【解决方案1】:

    当您调用 new_passenger.save_to_db() 时出现问题,导致 SqlAlchemy StatementError

    这不能序列化为 JSON,所以你需要提供一个可序列化的类型,例如一个字符串:

    ... 'error': str(e)}, 500
    

    或者要访问 StatementError 特定属性,添加单独的except

    ...
    except StatementError as se:
        return {'message': 'DB error', 'error': str(se), 'statement': se.statement}, 500
    

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多