Не получается сделать функцию подсчета столбцов в 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 у вас не выполняется никаких иных операций).

→ Ссылка