@ArtemMik
Python

Как в БД проверять есть ли такое значение?

У меня есть тг бот, который при /start создаёт пользователю аккаунт, баланс аккаунта изначально равен нулю, но если этот же пользователь ещё раз введёт команду /start, то он опять запишется в БД, надо сделать чтобы он добавлялся только один раз в БД.

Код:
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
    us_id = message.from_user.id
    us_name = message.from_user.first_name
    us_last_name = message.from_user.last_name
    db.db_table_val(user_id=us_id, user_name=us_name, user_last_name=us_last_name)
    await bot.send_message(message.chat.id, "Добрый день!\nВас приветствует телеграмм бот по накрутке (подписки, реакции, просмотры, комментарии)\nОзнакомтесь, пожалуйста, с правилами использования бота и оплаты. ↓", reply_markup=start)
    if message.from_user.id == int(ADMIN_ID):
        await bot.send_message(message.chat.id, "Привет админ)", reply_markup=main_admin)


class all(StatesGroup):
    all_message = State()


@dp.message_handler(text='Правила использования бота')
async def all_message(message: types.CallbackQuery):
    await bot.send_message(message.chat.id, "Потом добавим")


@dp.message_handler(text='Правила оплаты')
async def all_message(message: types.CallbackQuery):
    await bot.send_message(message.chat.id, "Потом добавим")


@dp.message_handler(text='Профиль')
async def all_message(message: types.CallbackQuery):
    user_name = db.cur.execute('SELECT user_name FROM users WHERE user_id = ?', (message.from_user.id,)).fetchall()
    for row in user_name:
        us = row[0]
    user_last_name = db.cur.execute('SELECT user_last_name FROM users WHERE user_id = ?', (message.from_user.id,)).fetchall()
    for row in user_last_name:
        us_last = row[0]
    price = db.cur.execute('SELECT price FROM users WHERE user_id = ?',
                                        (message.from_user.id,)).fetchall()
    for row in price:
        pr = row[0]
    await bot.send_message(message.chat.id, f"Ваш профиль:\nИмя: {us} {us_last}\nБаланс: {pr}")


БД:
def db_table_val(user_id: int, user_name: str, user_last_name: str):
    cur.execute('INSERT INTO users (user_id, user_name, user_last_name) VALUES (?, ?, ?)',
                   (user_id, user_name, user_last_name))
    db.commit()
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 2
fenrir1121
@fenrir1121
Начни с документации
INSERT ... ON CONFLICT DO NOTHING
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Добавлю к предыдущему ответу, что можно по факту выполнения запроса посмотреть сколько записей добавилось в БД и исходя из этого вывести пользователю соответствующий ответ на команду "старт": https://peps.python.org/pep-0249/#rowcount
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час