Как изменить переменную в бд, при условии наличия нужного параметра из того-же бд?

Есть вот такой код
conn = sqlite3.connect("users.db", check_same_thread=False)
cursor = conn.cursor()
user = message.from_user.id
sql = "UPDATE users SET balance = balance + ? \
WHERE id = ? AND buster1 = 'Нет' AND buster2 = 'Нет' AND buster3 = 'Нет' "
val = (0.010, user)
cursor.execute(sql, val)
conn.commit()

И нужно что-бы при на ходе у юзера разрешения ему добавлялось не 0.010 , а например 0.100 к балансу.

Можно как-то реализовать такое?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@o5a
Если речь про формирование бонуса по условию, зависящему от других полей (как в данном случае buster1 и т.п.), можно это прописать в самом запросе через оператор case (по логике похоже на ветвления if в самом python). Например:

sql = "UPDATE users SET balance = balance + \
CASE WHEN buster1 = 'Нет' AND buster2 = 'Нет' AND buster3 = 'Нет' THEN 0.010 \
    WHEN buster1 = 'Да' AND buster2 = 'Нет' AND buster3 = 'Нет' THEN 0.050 \
    WHEN buster1 = 'Да' AND buster2 = 'Да' AND buster3 = 'Да' THEN 0.100 \
END \
WHERE id = ?"

И соответственно в запросе передавать только id пользователя, сам бонус будет считаться автоматически.
Таким образом сами формируете зависимость бонуса от этих полей.

Если же имелось в виду что-то другое, лучше пишите подробнее с примером.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
То, что вы указали как 0.010, является не переменной в бд, а значением. Переменные в бд - это совсем другое.
Поэтому формально ответа на вопрос «как» нет.

Что касается «при на ходе у юзера разрешения» - я так понимаю, в бд за это отвечают поля booster - надо либо сделать на каждый вариант новую строку update с другими параметрами логики where, которые и проверяют значения полей booster, либо делать логику в самой программе, чтобы она считывала значения booster, осмысливала и формировала нужную строку update для базы. Всё просто.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы