我想制作一个可以接受两个日期参数并返回数据库表中所有结果的API。我不希望这些日期存储在任何地方,因此无法将它们定义为列。我的表有三列:id(int),answers(json),datestamp(DateTime)。我想在API请求中传递“ start_date”和“ end_date”变量,并具有该时期的所有答案和ID。我的日期从字符串的转换很好,但是我一直受到{“ _schema”:[“无效的输入类型。”]}的响应。即使表中不存在这些字段,也可以传递这些字段吗?我是否需要像在模型中完成列那样定义它们?如果是这样,而不是Column(...),那会是什么?
我尝试了“ additional_properties = fields.Raw()”,但仍然收到无效的输入类型错误。我玩过该架构,但似乎缺少了一些东西。
from ma import ma # marshmallow
from models.c_bulk import CBulkModel
from flask_restful import fields
class CBulkSchema(ma.ModelSchema):
class Meta:
additional properties = fields.Raw()
model = ClaraBulkModel
dump_only = ("id", "answers", "datestamp")
from typing import List
from datetime import timedelta
from db import db
class CBulkModel(db.Model):
__tablename__ = "test_post_date"
datestamp = db.Column(db.DateTime, nullable=False)
id = db.Column(db.BigInteger, nullable=True, unique=True, primary_key=True)
answers = db.Column(db.JSON, nullable=True)
@classmethod
def find_all(cls, start_date, end_date): # -> List["CBulkModel"]:
return cls.query.filter(db.and_(start_date >= cls.datestamp, end_date < cls.datestamp))
{“ _ schema”:[“无效的输入类型。”]},而不是那时的调查。
答案 0 :(得分:0)
好吧,我想我知道了。为了使最终解决方案正常工作,还有更多代码更改,但是通过不传入JSON解决了输入问题。如果您不通过架构传递JSON,则可以加载任何属性并将其用作过滤器。
答案 1 :(得分:0)
尝试添加未知=包含..希望有帮助...
enter code herefrom ma import ma # marshmallow
from models.c_bulk import CBulkModel
from flask_restful import fields
class CBulkSchema(ma.ModelSchema):
class Meta:
additional properties = fields.Raw()
model = ClaraBulkModel
dump_only = ("id", "answers", "datestamp")
unknown = INCLUDE