我正在尝试使用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 -
我有什么想念吗?有人可以帮忙吗?
答案 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)