fetchall() возвращает пустой список. Python, sqlite3
Не могу сообразить, как работать с fetchall, fetchone в sqlite3.
Вот у меня функция, которая вытаскивает из бд статистику за один день:
def get_day_statistics():
statistics = cursor.execute(f"SELECT created, "
f"(SELECT name "
f"FROM categories "
f"WHERE expences.category_codename = categories.codename) AS name, "
f"SUM(amount) AS amount "
f"FROM expences "
f"WHERE created = {str(date.today())} "
f"GROUP BY name "
f"ORDER BY amount DESC;")
fetch = statistics.fetchall()
print(fetch)
return fetch
В DB Browser запрос срабатывает как положенно и возвращает мне именно то, что я хочу.
Следуя логике, выполняю execute с этим запросом и ловлю ответ с помощью fetchall(). Но получаю пустой список.
Где я туплю, ребят?
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Проблема в том, что вы делает подстановку в строку в этом месте f"WHERE created = {str(date.today())}.
Это плохо само по себе, но в том числе это создает проблему тут. Питон форматирует дату так, что sqlite не понимает переданный формат. Замените на связываемую переменную (англ. parameter substibution):
statistics = cursor.execute(f"SELECT created, "
f"(SELECT name "
f"FROM categories "
f"WHERE expences.category_codename = categories.codename) AS name, "
f"SUM(amount) AS amount "
f"FROM expences "
f"WHERE created = ? "
f"GROUP BY name "
f"ORDER BY amount DESC;", (date.today(),))