Запятая после user_id нужна для того, чтобы передать его в качестве элемента кортежа, который является вторым аргументом метода execute().
Метод execute() принимает два аргумента: строку SQL-запроса и кортеж значений, которые нужно вставить в запрос. В данном случае в запросе есть одно место, которое нужно заполнить значением user_id.
Параметры, которые нужно передать в запрос, должны быть упакованы в кортеж. Если бы мы написали просто (user_id), то это было бы эквивалентно user_id без скобок, то есть передалось бы просто значение переменной user_id.
Однако, метод execute() ожидает кортеж с одним элементом, поэтому мы обязаны поставить запятую после user_id, чтобы создать кортеж с одним элементом, а не передать просто значение переменной.
user_id как пример. Тоже с этим мучался.