2
我目前正在學習SQLAlchemy的,我有一個評價模型,它看起來是這樣的:如何從SQLAlchemy查詢獲取AVG?
class Review(Base):
__tablename__ = "reviews"
id = Column(Integer, primary_key=True)
raw_score = Column(String(150))
score = Column(Float, nullable=False)
summary = Column(String(150), nullable=False)
review = Column(String(1500), nullable=False)
source = Column(String)
product_id = Column(Integer, ForeignKey('products.id'), nullable=False)
reviewer_id = Column(Integer, ForeignKey('reviewers.id'), nullable=False)
使用SQLAlchemy的,我能夠得到所有關於某產品的評論,如果審稿人是不是評論家:
reviews = session.query(Review).join(Review.reviewer).\
filter(Review.product == product).\
filter(Reviewer.critic == False).\
values(Reviewer.critic,
Reviewer.display_name,
Review.raw_score,
Review.score,
Review.review,
Review.source)
然後我試圖再次查詢,讓我由評論家和批評家不寫分數的平均值:
critic_avg = session.query(func.avg(Review.score)).filter(Review.product == product).\
filter(Reviewer.critic == True)
not_critic_avg = session.query(func.avg(Review.score)).filter(Review.product == product).\
filter(Reviewer.critic == False)
然而,這並沒有讓我回到預期的價值,它似乎總是讓我回到產品的平均分數。它似乎是產品的過濾器正在工作,但篩選器的批評不是。
預計非評論家平均:2.75
實際非評論家平均:2.75
(有沒有審稿誰在DB評論家還)
預計評論家平均:0.00
實際評論家平均分:2.75
好奇的是,如果上面有明顯的錯誤,並且如果有更有效的方法反駁這一點。我能否在我查詢評論的同時解決這個問題?
一如既往,再次感謝。
這真的很有幫助。非常感謝您指出query.as_scalar() – pyNovice89
您可以爲此打印任何查詢或表達式,無需首先使用'as_scalar'創建標量子查詢。 –
@IljaEverilä真遺憾,我不知道這件事。非常感謝! –