Предположим, у меня есть таблица рейтингов, книг и пользователей, созданная следующим образом:
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 десятичного знака), отображается «(Десятичное ('4.5000000000000000'),)»
Как исправить эти проблемы и почему он извлекает что-то отличное от float (я предполагаю, потому что рейтинг имеет другой тип, кроме целого)?
Примечание: я не могу использовать такие вещи, как создание классов / objects или специальные свойства SQLAlchemy - только SQL запросов, подобных приведенным выше.