Object is not Json serializable?
本问题已经有最佳答案,请猛点这里访问。
我想询问一下这些模型。
例如,名为"demo"的模型名,我想获取表的所有记录。
1 2 3 4 5 6 | class Demo(db.Model): __tablename__ ="demo" field_1 = db.Column(db.String(255), nullable=False) field_2 = db.Column(db.String(255), nullable=False) |
现在我在质疑
1 | records = Messages.query.all() |
我正试图发送记录作为响应,所以我面临这个错误。我是新来的,请帮我把它整理一下。
sqlAlchemy返回resultProxy对象,最简单/最简单的处理方法是动态序列化。许多python数据类型由于明显的原因不以本机方式序列化到json。
要使其干净输出,请尝试以下操作:
1 2 3 4 5 6 7 8 | def serialize_message(msg): return { "field_str": msg.field_str, "field_int": int(msg.field_int), "field_dt": msg.field_dt.strftime("%Y%m%d"), } records = [serialize_message(z) for z in Messages.query] |
通过这种方式,您可以根据需要修改诸如python datetime之类的类型,或者其他不以本机方式序列化到JSON的特殊类型。
更高级的方法是将序列化方法直接附加到模型定义,例如:
1 2 3 4 5 6 7 8 9 10 11 12 | class Demo(db.Model): __tablename__ ="demo" field_str = db.Column(db.String(255), nullable=False) field_int = db.Column(db.Integer, nullable=False) field_dt = db.Column(db.DateTime, nullable=False) def to_json(self): return { "field_str": self.field_str, "field_int": int(self.field_int), "field_dt": self.field_dt.strftime("%Y%m%d"), } |
然后您可以直接将其用作:
1 | records = [z.to_json() for z in Messages.query] |