Не получается сделать функцию подсчета столбцов в sqlite. RecursionError: maximum recursion depth exceeded in comparison
Есть таблица sqlite.
Хочу посчитать сумму столбцов agent_materials в таблице profile. Написал такой код:
def all_agent_materials():
cur.execute('SELECT SUM(agent_materials) as sum FROM profile')
print({all_agent_materials()})
db.commit()
Выдаёт ошибку «RecursionError: maximum recursion depth exceeded in comparison»
Написал тот же код, только в самом sql - все работает. Что не так?
Насколько я понимаю, это происходит из-за того что код зациклен, но я не понимаю что нужно сделать чтобы это профиксить. Пробовал поднять max recursion, но пайтон просто крашится.
Ответы (1 шт):
Проблема в том, что вы внутри функции all_agent_materials снова вызываете функцию all_agent_materials (в аргументах print), отсюда и рекурсия, и базы у нее нет, поэтому всегда будет возникать переполнение.
В sqlite все это делается через курсор, у вас приведен очень маленький фрагмент кода, но по переменной cur я полагаю, что вы, все-таки, его используете.
Для решения вашей проблемы вместо еще одного вызова функции требуется вызвать метод fetchall у курсора, который возвращает все строки, полученные в результате запроса в виде списка.
Суть примерно такая:
import sqlite3
conn = sqlite3.connect("table.db")
c = conn.cursor()
c.execute('SELECT SUM(agent_materials) as sum FROM profile')
result = c.fetchall()
print(result)
Дополнительно
Делать коммит db.commit() в данном случае смысла никакого нет, поскольку чтение данных не изменяет таблицу и, поэтому, подтверждать нечего (если помимо запроса SELECT у вас не выполняется никаких иных операций).