烧瓶棉花糖 sqlalchemy 无法转储对象

时间:2021-07-14 18:57:16

标签: flask flask-sqlalchemy flask-restful marshmallow flask-marshmallow

我有一个非常简单的 Flask、Flask-Restful、Flask-SqlAlchemy 和 Flask-Marshmallow 实现:

我在尝试转储我刚创建的对象时收到验证错误:{'_schema': ['Invalid input type.']}。

init.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))

Schemas.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()

views.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 中模型属性的确切类型与我正在创建并尝试转储的模型的属性相匹配......所以我真的不确定它可能是什么。

0 个答案:

没有答案