【发布时间】:2020-10-08 14:44:21
【问题描述】:
假设我有一个表格评级,书籍和用户创建如下:
CREATE TABLE books(
id SERIAL PRIMARY KEY,
ISBN VARCHAR NOT NULL,
title VARCHAR NOT NULL,
author VARCHAR NOT NULL,
publicationYear INTEGER NOT NULL
);
CREATE TABLE ratings(
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
book_id INTEGER REFERENCES books(id),
rating INTEGER CHECK (rating <= 5)
);
CREATE TABLE users(
id SERIAL PRIMARY KEY,
username VARCHAR UNIQUE,
password VARCHAR NOT NULL,
);
我尝试创建一个网站,让我可以对某本书进行评分,而每次一些用户对这本书进行评分时,该网站应该保持其平均评分。 我的尝试:在 application.py 中的某些路线下: ....
rating = db.execute("SELECT AVG(rating) FROM ratings WHERE book_id = :id", {"id": book_id}).fetchone()
if rating is None:
rating = 0
....
return render_template("details.html", rating = rating, book = book)
内部细节.html:
(some html code)
Rating: {{ rating }} out of 5
(some other html code)
一切正常(没有任何错误),但有两个问题我无法解决:
1) 如果没有评分,我希望网站显示 0(评分),但它却显示为“(无,)”。
2) 如果有评分,而不是显示(例如)4.5 作为评分(我希望答案四舍五入到小数点后 1 位),而是显示“(Decimal('4.5000000000000000'),)”
如何解决这些问题以及为什么它检索非浮点数(我假设因为 rating 具有除整数以外的其他类型)?
备注:我不能使用任何东西,例如创建类/对象或特殊的 SQLAlchemy 属性 - 只能使用上述 SQL 查询。
【问题讨论】:
-
你好远方,欢迎来到stackoverflow。您可以在返回渲染视图之前打印评级吗?这似乎与 SQLAlchemy 没有密切关系,我真的看不出那部分有什么错误。您可以检查 round(rating,1) 是否有效
标签: python html sql flask sqlalchemy