Короткий ответ SQL-инъекция — это внедрение произвольного SQL-кода через непроверенный пользовательский ввод, который подставляется в запрос как часть текста; код уязвим, потому что формирует SQL-строку через f-string вместо параметризованного запроса. Как это работает подробнее Если ввод пользователя напрямую вставляется в текст SQL-запроса, атакующий может передать фрагмент, который изменит логику запроса (например, добавит OR 1=1 или завершит запрос и начнёт новый). Пример кода Что использовать на практике Практика. Защита — параметризованные запросы (placeholders), где драйвер БД сам экранирует значения и никогда не интерпретирует их как часть SQL-синтаксиса; ORM вроде SQLAlchemy/Django ORM по умолчанию параметризует запросы, но raw SQL и text() всё ещё можно использовать небезопасно. Подводные камни Риск. Считают, что экранирование кавычек вручную достаточно безопасно; доверяют «внутренним» данным без параметризации; используют f-строки/%-форматирование для построения SQL с пользовательским вводом.