@ddgryaz

Как проверить уникальность пользователя в боте Telegram?

Доброго времени суток! Подскажите, необходимо добавлять в табличку всех пользователей бота.
(Использую - pytelegrambotapi) Реализовал это так:
conn = mysql.connector.connect(user='user', password='password',
                               host='localhost', database='xxx')
cursor = conn.cursor(buffered=True)

@bot.message_handler(commands=['start'])
def first(message):
    global user_id
    global nickname
    global fn
    global sn
    user_id = message.from_user.id
    nickname = message.from_user.username
    fn = message.from_user.first_name
    sn = message.from_user.last_name
    add_allusers = (
        'INSERT INTO allusers3 (nickname, name, second_name, telegram_id, dt) VALUES (%(nn)s, %(fn)s, %(sn)s, %(t_id)s, %(dtn)s)')
    data_allusers = {
        'nn': nickname,
        'fn': fn,
        'sn': sn,
        't_id': user_id,
        'dtn': datetime.datetime.now(),
    }
    cursor.execute(add_allusers, data_allusers)
    conn.commit()


Как оформить проверку на уникальность по столбцу telegram_id?
Пытался как то так, к результату не пришел:
if cursor.execute('SELECT EXISTS(SELECT telegram_id FROM allusers3 WHERE telegram_id = ' + str(user_id) + ')'):
        add_allusers = (
            'INSERT INTO allusers3 (nickname, name, second_name, telegram_id, dt) VALUES (%(nn)s, %(fn)s, %(sn)s, %(t_id)s, %(dtn)s)')
        data_allusers = {
            'nn': nickname,
            'fn': fn,
            'sn': sn,
            't_id': user_id,
            'dtn': datetime.datetime.now(),
        }
        cursor.execute(add_allusers, data_allusers)
        conn.commit()
    else:
        pass


То есть, необходимо чтобы проверялось, если есть такой айдишник в таблице, то ничего не делать. Если нет, то записать пользователя в таблицу
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
mlneko
@mlneko
cursor.execute(f'SELECT * FROM allusers3 WHERE t_id = {t_id}')
if cursor.fetchall() == []:
...
#не найдено, тут вставляешь
else:
#найдено
...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Самый компактный вариант:

INSERT IGNORE INTO allusers3 ...

При этом telegram_id должен быть PRIMARY KEY или UNIQUE. IGNORE делает именно то, что нужно - игнорирует вставку, если она нарушает ограничения целостности.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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