JSON 序列化程序的 StatementError
StatementError for JSON serializer
这里我有简单的休息 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"
}
它returns这个错误,
TypeError: Object of type StatementError is not JSON serializable
对于 is_ontrip
我已经尝试 0 and 1, true, false
带牙套和不带牙套。每次都报上面的错误。
我哪里做错了?
调用 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
这里我有简单的休息 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"
}
它returns这个错误,
TypeError: Object of type StatementError is not JSON serializable
对于 is_ontrip
我已经尝试 0 and 1, true, false
带牙套和不带牙套。每次都报上面的错误。
我哪里做错了?
调用 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