我有一个非常简单的 Flask、Flask-Restful、Flask-SqlAlchemy 和 Flask-Marshmallow 实现:
我在尝试转储刚刚创建的对象时收到验证错误:{'_schema': ['Invalid input type.']}。
初始化.py
app = Flask(__name__)
configure_rds(app)
db = SQLAlchemy(app)
ma = Marshmallow(app)
api = Api(app)
register_blueprints(app)
模型.py
class MyModel(db.Model):
__tablename__ = 'my_table'
id = db.Column(db.Integer, primary_key=True)
uid = db.Column(db.String(255))
other_id = db.Column(db.Integer)
last_modified = db.Column(db.Date)
status = db.Column(db.String(255))
模式.py
class MyModelSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = MyModel
load_instance = True
id = ma.auto_field()
uid = ma.auto_field()
other_id = ma.auto_field()
last_modified = ma.auto_field()
status = ma.auto_field()
视图.py
class MyModelView(Resource):
def get(self):
maps = MyModel.query.all()
ma_schema = MyModelSchema(many=True)
body = ma_schema.dump(maps)
resp = jsonify(body)
resp.status_code = 200
new_map = maps[0]
return resp
def post(self):
args = self.parser.parse_args()
ma_schema = MyModelSchema(many=False)
# new_model = ms.load(args, session=db.session)
# new_model .last_modified = date.today()
new_model = MyModel(uid=args['uid'],
other_id=args['other_id'],
status=args['status'],
last_modified=datetime.date.today())
db.session.add(new_model )
db.session.commit()
body = ma_schema.dump(new_model)
resp = jsonify(body)
resp.status_code = 200
get 方法工作得很好。该帖子会将新模型添加到数据库中,但随后无法使用模式序列化模型。它也无法将我的 reqparse 参数加载到模式中。为什么它能够添加到 RDS,从 RDS 读取,却不能序列化对象?
我尝试了一堆不同的列类型,尝试了各种架构设置,但似乎没有任何效果。此外,我已经验证了 get 中模型属性的确切类型与我正在创建并尝试转储的模型的属性相匹配......所以我真的不确定它可能是什么。