【发布时间】:2021-06-08 18:33:01
【问题描述】:
我试图通过flask-mysqlAlchemy在一个查询中从两个表中获取数据,并且我得到了所有数据。但是当我尝试通过flask-marshmallow 转储它时,它会显示一个包含很多空对象的数组。但是,如果我将 .first() 放在查询中,它会显示两个表的第一个结果。
我创建了一个包含两个表中的每个字段的类,它像模型实体一样工作,我不确定它是否需要,但这里是它:
class HotelInfoReview(db.Model):
__tablename__ = 'hotel_info_review'
country_area = db.Column(db.String(45), nullable=False, primary_key=True)
hotel_id = db.Column(db.String(32), unique=True, nullable=False, primary_key=True)
hotel_name = db.Column(db.Text)
hotel_url = db.Column(db.Text)
hotel_address = db.Column(db.Text)
review_score = db.Column(db.Float, nullable=True)
review_qty = db.Column(db.Integer, nullable=True)
clean = db.Column(db.Float, nullable=True)
comf = db.Column(db.Float, nullable=True)
loct = db.Column(db.Float, nullable=True)
fclt = db.Column(db.Float, nullable=True)
staff = db.Column(db.Float, nullable=True)
vfm = db.Column(db.Float, nullable=True)
wifi = db.Column(db.Float, nullable=True)
uuid = (db.Column(db.String, nullable=True, primary_key=True))
review_title = db.Column(db.Text)
review_url = db.Column(db.Text)
review_score = db.Column(db.Float, nullable=True)
review_date = db.Column(db.DateTime)
reviewer_name = db.Column(db.Text)
hash_reviewer_name = db.Column(db.String, nullable=True)
reviewer_location = db.Column(db.String, nullable=True)
posting_conts = db.Column(db.Integer, nullable=True)
positive_content = db.Column(db.Text)
negative_content = db.Column(db.Text)
tag_n1 = db.Column(db.Text)
tag_n2 = db.Column(db.Text)
tag_n3 = db.Column(db.Text)
tag_n4 = db.Column(db.Text)
tag_n5 = db.Column(db.Text)
staydate = db.Column(db.Text)
然后我定义了像文档说的输出方法:
class HotelInfoReviewSchema(ma.Schema):
class Meta:
fields = ('country_area', 'hotel_id', 'hotel_name', 'hotel_url', 'hotel_address', 'review_score', 'review_qty',
'clean', 'comf', 'loct', 'fclt', 'staff', 'vfm', 'wifi', 'uuid', 'review_title', 'review_url',
'review_date', 'reviewer_name', 'hash_reviewer_name', 'reviewer_location', 'posting_conts',
'positive_content', 'negative_content', 'tag_n1', 'tag_n2', 'tag_n3', 'tag_n4', 'tag_n5')
hotel_info_review_schema = HotelInfoReviewSchema()
hotels_info_review_schema = HotelInfoReviewSchema(many=True)
最后我为转储结果创建了一个路由:
@app.route('/HotelsAndReviews')
def get_reviews():
data = db.session.query(HotelInfo, HotelReview)
.join(HotelReview, HotelReview.hotel_id == HotelInfo.hotel_id)
.filter((HotelReview.review_date.between('2018-01-01', '2019-12-12')))
result = hotels_info_review_schema.dump(data)
return jsonify(result)
我错过了什么?我知道这个问题已经被回答了,但是这个回答对我不起作用,因为我已经在我的代码中应用了这个答案。 谢谢!
【问题讨论】:
标签: python flask-restful marshmallow