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(),))
→ Ссылка