Как складывать и вычитать поступающие в БД числа от одного 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é
→ Ссылка
Как это вижу я:
- Создаём таблицу, в ней столбцы - user_id, balance
- Не добавляем значения, а изменяем их
Как это выглядит в коде:
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()