role_id = {}".format(role.id)
За такое бьют по рукам, так как стоит тебе попытаться подставить так строку - начнутся проблемы. Синтаксис
подстановки параметров для кого придумали?
А по вопросу: с какого перепуга ты взял, что у тебя запрос обязательно вернёт хоть одну строку?
А если ни одной строки не вернулось, что fetchone() вернёт None. От которого ты потом берешь нулевой индекс.
Вбей в консоли питона
None[0]
и сравни ошибку со своей.
Так что сначала вытащи результаты fetchone() в отдельные переменные, проверь их на None, и только потом делай с ними что нужно.