You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask使用jsonify序列化Flask-SQLAlchemy的Stocks实例报错如何处理

问题原因

报错是因为Flask默认的JSON序列化器无法直接序列化Flask-SQLAlchemy的模型类实例,你需要先将实例转换为它的字符串表示形式,再传入jsonify。

方案1:临时适配(仅当前场景使用)

直接在生成列表时,将每个Stocks实例转成字符串即可,修改代码如下:

r = {
      "stocks": [str(stock) for stock in current_user.stocks]
     }

调用jsonify(r)即可直接输出你要求的格式。

方案2:全局适配(所有场景都可直接序列化Stocks实例)

如果项目中多处需要序列化Stocks实例,可以自定义Flask的JSON编码器,步骤如下:

  1. 首先给Stocks模型类补充序列化逻辑,也可以直接复用实例的字符串表示:
class Stocks(db.Model):
    # 你原来的字段定义
    id = db.Column(db.Integer, primary_key=True)
    symbol = db.Column(db.String(10), unique=True)

    def __str__(self):
        return f"<Stocks {self.symbol}>"

    def to_json(self):
        # 如果以后需要返回字段字典也可以在这里定义,当前需求直接返回str即可
        return str(self)
  1. 自定义Flask的JSON编码器,处理Stocks类型的实例:
from flask.json import JSONEncoder

class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Stocks):
            return obj.to_json()
        # 其他自定义类型处理可以加在这里
        return super().default(obj)

# 绑定到你的Flask应用实例
app.json_encoder = CustomJSONEncoder

配置完成后,你原来的代码不需要修改,直接调用jsonify(r)就可以正常序列化。

内容的提问来源于stack exchange,提问作者lipebromf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 22:27:03