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

使用Marshmallow SQLAlchemySchema时遇TypeError:__init__()接收到意外关键字参数'strict'的问题求助

使用Marshmallow SQLAlchemySchema时遇TypeError:init()接收到意外关键字参数'strict'的问题求助

嘿,我来帮你解决这个问题!先梳理下你的情况:你想用Marshmallow序列化SQLAlchemy模型返回JSON,但现在遇到了strict参数的错误,去掉这个参数又返回空对象{},咱们一步步来排查解决。

你的代码片段

from flask import Flask,jsonify
from flask_sqlalchemy import SQLAlchemy
from marshmallow_sqlalchemy import SQLAlchemySchema
from marshmallow import Schema
import os
import jsonpickle

app = Flask(__name__)

db_name = 'student.db'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, db_name)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy()
db.init_app(app)

from models.model import Tutor

with app.app_context():
    db.create_all()

#Create tutor schema
class TutorSchema(SQLAlchemySchema):
    class Meta:
        fields = ('tutor_id','tutor_forename','tutor_surname','tutor_email','tutor_category','module_id')

# In it schema
tutor_schema = TutorSchema(strict = True)
tutors_schema = TutorSchema(many =True,strict = True)

@app.route('/', methods = ['GET'])
def tefetchLessonsByTutorst():
    lessons = Tutor.query.all()
    results = tutors_schema.dump(lessons)
    return jsonify( results)

遇到的错误

TypeError: init() got an unexpected keyword argument 'strict'

问题原因与解决方案

1. 移除strict参数

Marshmallow 3.x版本已经移除了strict参数,这个参数是旧版本(2.x)用来控制验证错误抛出方式的,新版本默认就启用了严格模式,所以你不需要再手动传递这个参数啦。

2. 修复Schema的Meta配置(解决返回空对象的问题)

你现在的TutorSchema没有指定对应的SQLAlchemy模型!SQLAlchemySchema需要在Meta类里明确设置model属性,不然它不知道要序列化哪个模型的数据,自然返回空对象。

修改后的TutorSchema和实例化代码如下:

#Create tutor schema
class TutorSchema(SQLAlchemySchema):
    class Meta:
        model = Tutor  # 必须指定对应的模型类
        fields = ('tutor_id','tutor_forename','tutor_surname','tutor_email','tutor_category','module_id')

# 实例化Schema时移除strict参数
tutor_schema = TutorSchema()
tutors_schema = TutorSchema(many=True)

3. 额外检查点

  • 确保你的Tutor模型里确实包含Meta中指定的所有字段(tutor_id、tutor_forename等)
  • 确认数据库里Tutor表有数据,不然查询出来是空的,返回的也是空数组哦

这样修改后,再访问你的GET接口,应该就能正确返回Tutor数据的JSON响应啦!

备注:内容来源于stack exchange,提问作者Randi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:07:32