Задать вопрос
@Max1mKa12

Как прибавлять значение в базе данных SQL для бота aiogram?

У меня в боте люди могут кидать !Куб и если им не везет, то они получают мут, но я хочу чтобы это еще записывалось в БД. Я понял как сделать, чтобы записывало айди и тэг пользователей в БД, но не могу понять как сделать чтобы добавлялось +1 значение в ячейку. Надо как-то на мете loss и win в коде сделать +1 в таблицу, но я в программировании не смешарик.
#Переменные с привилегиями для мута и размута
perms1 = ChatPermissions()
perms2 = ChatPermissions(can_send_audios=True, can_add_web_page_previews=True, can_change_info=True, can_invite_users=True, can_manage_topics=True, can_pin_messages=True, can_send_documents=True, an_send_media_messages=True, can_send_messages=True, can_send_other_messages=True, can_send_photos=True, can_send_polls=True, can_send_video_notes=True, can_send_videos=True, can_send_voice_notes=True)

#ЛОГИН
logging.basicConfig(level=logging.INFO)

#Сам бот
bot = Bot(token = cfg.TOKEN2)
dp = Dispatcher(bot)


conn = sqlite3.connect('db/database.db', check_same_thread=False)
cursor = conn.cursor()

async def on_sturtup(_):
     sqlite3.connect("new.db")
     print("Подключён к БД")
     print("Я тест базы данных")

#Создание таблицы
cursor.execute("CREATE TABLE IF NOT EXISTS winka(user_id, username, win, loss)")
conn.commit()


#Ввод данных в таблицы
def db_table_val(user_id: int, username: str, win: int, loss: int):
	cursor.execute('INSERT INTO winka (user_id, username) VALUES (?, ?, ?, ?)', (user_id, username, win, loss))
	conn.commit()

#Работа куба на число 1
kukb1 = ("!Куб 1", "!куб 1") 
@dp.message_handler(Text (kukb1))
async def cub(message: types.Message):
      kub = await bot.send_dice(message.chat.id)
      kub = kub['dice']['value']
      await sleep (4)
      if 1 < kub:
       loss= await message.reply(text=f"{message.from_user.first_name}\nТы не угадал!\nВыпало: {kub}\nТеперь у тебя мут на 10 минут")
       await bot.restrict_chat_member(message.chat.id, message.from_user.id, perms1)
       await sleep(600)
       await bot.restrict_chat_member(message.chat.id, message.from_user.id, perms2)
      elif 1 > kub:
        loss = await message.reply(text=f"{message.from_user.first_name}\nТы не угадал!\nВыпало: {kub}\nТеперь у тебя мут на 10 минут")
        await bot.restrict_chat_member(message.chat.id, message.from_user.id, perms1)
        await sleep(600)
        await bot.restrict_chat_member(message.chat.id, message.from_user.id, perms2)
      else:
        win = await message.reply(text=f"{message.from_user.first_name}\nТЫ ПОБЕДИЛ!\nВыпало: {kub}\nТеперь у тебя мут на 10 минут")

      us_id = message.from_user.id
      username = message.from_user.username

      db_table_val(user_id=us_id, username=username, win=win, loss=loss)
      return cub


if __name__ == '__main__':
  executor.start_polling(dp, on_startup = on_sturtup, skip_updates=True)
  • Вопрос задан
  • 307 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@alexalexes
1. Выбрать из базы запись по известному user_id.
2. Если получили запись, то выполнить обновление атрибута записи win = win + 1 где user_id этой записи равен известному user_id (то же самое в случае проигрыша loss = loss + 1).
3. Если не получили запись, то делаете вставку записи пользователя, с win = 0, loss = 0 (с 1 в нужной ситуации).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexhadock
@alexhadock
Just a tech
Привет.

Заложи инкрементальный первичный ключ на стороне БД. Рекомендую привести запрос:
CREATE TABLE IF NOT EXISTS winka(user_id, username, win, loss)


К виду:
CREATE TABLE IF NOT EXISTS winka(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, user_id, username, win, loss)


Остальной код менять необходимости не вижу, вставлять можно так же.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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