cursor.execute возвращает генератор, который возвращает кортежи значений. Таким образом, в конструкции:
for i in qwe.execute(""" SELECT vk_id FROM stata """):
значением i будет не значение vk_id, а кортеж из одного значения (vk_id,).
Далее, в этом цикле делается запрос с (i,), который даёт ((vk_id,),), то есть одно значение. Кроме того, внутри итерации по курсору выполняется другой запрос с тем же курсором с затиранием внутренних данных курсора от предыдущего запроса, поэтому при заходе на вторую итерацию уже не возвращается ничего. Получается один запрос по одному vk_id. Всё работает ровно так, как написано.
Что тут можно сделать?
Вариант 1. В executemany имеет смысл передать список не из одного значения, а из множества (иначе нет смысла в executemany, проще обычный execute). Например, их можно получить путём накопления в цикле в список с последующим отдельным (вне цикла) вызовом executemany. Но если с данными запроса ничего особого делать не нужно, то и цикл тут лишний, можно получить всё сразу через fetchall().
Вариант 2. Обойтись средствами SQL. Примеры:
-- добавить всем 1
UPDATE stata SET coins = coins+1;
-- добавить удвоенный доход всем с вип-статусом, если срок его действия ещё не истёк
UPDATE stata SET coins = coins+dohod*2 WHERE vip_status=1 AND vip_status_end>=NOW();