Как складывать и вычитать поступающие в БД числа от одного id?

Имеется таблица в SQLite, есть столбец operation, нужно чтобы при функции 'Доход' число добавлялось к тому что там есть, и при функции 'Расходы' число от пользователя вычиталось. Как это можно реализовать в python sqlite3? Моя запись в теле бота:

def get_sum(message):
if message.text == 'Доходы':
    bot.send_message(message.chat.id, 'Введите сумму: ')
    bot.register_next_step_handler(message, get_oper)


def get_oper(message):
value = int(message.text)
operation = '+'

BotsBD.add_record(message.from_user.id, operation, value)

Моя запись в части БД(полагаю основная ошибка в ней):

 def add_record(self, users_id, operation, value):
    """Создаём запись о расходах/доходах"""
    self.cursor.execute("INSERT INTO `records` (`users_id`, `operation`, `value`) VALUES (?, ?, ?)",
                        (self.get_user_id(users_id),
                         operation == '+',
                         value))
    return self.conn.commit()

operation в таблице SQLite имеет тип Boolean и не равно 0.


Ответы (1 шт):

Автор решения: biflé

Как это вижу я:

  1. Создаём таблицу, в ней столбцы - user_id, balance
  2. Не добавляем значения, а изменяем их

Как это выглядит в коде:

def plus(self, user_id, amount):
    self.cursor.execute('UPDATE records SET balance = balance + ? WHERE user_id = ?', (amount, user_id))
    self.connection.commit()
#минус по аналогии, в запросе просто меняем знак

Важный нюанс! Нам нужно создать первую запись, для этого мы проверяем наличие записей в бд и создаём новую, если записи отсутствуют

def exists(self, user_id): #проверка наличия записей
    res=self.cursor.execute('SELECT * FROM records WHERE user_id = ?', (user_id,)) 
    return bool(len(res.fetchall())

def add(self, user_id): #создание новой записи
    self.cursor.execute('INSERT INTO records (user_id, balance) VALUES(?,?)', (user_id, 0))
    self.connection.commit()
→ Ссылка