带Marshmallow的Flask Alchemy返回空的JSON

时间:2016-11-12 02:42:12

标签: python json flask flask-sqlalchemy flask-restful

我正在尝试使用Flask Alchemy和Flask Marshmallow从我的数据库查询后返回一个json数据

但是,我的代码总是会返回空的JSON数据。

这是我的代码:

我的观点:

@app.route('/customer/', methods=['GET'])
def get_customer():
  customers = models.Customer.query.all()
  #c = models.Customer.query.get(1) # Get Customer with an ID of 1

  customers_schema = CustomerSchema()

  print customers_schema.dump(customers).data
  payload = customers_schema.dump(customers).data
  resp = Response(response=payload, status=200, mimetype="application/json")
  return(resp)

我的模特:

class Customer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    address = db.relationship('Address', backref='customer', lazy='dynamic')

    def __repr__(self):
        return '<Customer %r>' % (self.nickname)

我的架构:

class CustomerSchema(ma.ModelSchema):
    class Meta:
        model = Customer

这是从控制台看到的结果:

 * Debugger is active!
 * Debugger pin code: 817-774-044
{}
127.0.0.1 - - [12/Nov/2016 09:37:59] "GET /customer/ HTTP/1.1" 200 -
{}
127.0.0.1 - - [12/Nov/2016 09:41:27] "GET /customer/ HTTP/1.1" 200 -

我有什么想念吗?有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

在CustomerSchema中,您应该传递参数as many = True,就像您期望的列表一样,例如: customers_schema = CustomerSchema(many = True)

答案 1 :(得分:1)

我想在上面的答案中添加一些东西。

在 Marshmallow 3.x 中,参数 strict 已被删除,因为架构总是严格的。

作为结果的空 JSON 对象可能是由不同的情况引起的,例如我曾经在架构中误将“=”与“:”一起使用,这导致转储结果为 [ Unknown field. ],结果为空的 JSON 对象.

为了在 Marshmallow 3.x 中进行调试,您可以使用 Schema.validate 返回验证错误字典:

  customers_schema = CustomerSchema()

  print(customers_schema.validate(customers))

我希望这可以在未来帮助一些人

答案 2 :(得分:0)

您可能在序列化过程中遇到了一些错误,而您只是忽略它。尝试使用strict=True实例化您的架构,看看有什么错误:

customers_schema = CustomerSchema(strict=True)