Shandy, небезопасно.
Если вам в people_id прилетит что-то вроде "1;DELETE FROM users;" откуда-то из пользовательского ввода, то у вас грохнется вся таблица.
Shandy, лучше привыкать сразу писать правильно. А то потом в более сложном приложении сделаете так же по привычке, и понаплодите кучу дырок безопасности на ровном месте.
Shandy,
Во втором случае оно вставит примерно так:
SELECT id_user FROM users WHERE id_user = '1;DELETE FROM users;'
и свалится с ошибкой, поскольку такого id не найдет.
Впрочем - почитайте документацию хотя бы https://docs.python.org/3/library/sqlite3.html
там в нескольких первых абзацах говорится об этом )
Разве во втором случае нельзя подсунуть 1;DELETE FROM users; и дропнуть всю таблицу?
Нельзя.
Помимо безопасности, использование параметризированных запросов вместо форматирования позволяет не заботиться об обрамлении кавычками в случае строк. Для вставки строкового при форматировании пришлось бы учитывать и добавлять кавычки
f"SELECT * FROM users WHERE user_name = '{user_name}' "
в случае подстановки параметров это не требуется
execute("SELECT * FROM users WHERE user_name = ?", (user_name, ) )