@kkkrkkk

Ошибка IntegrityError: UNIQUE constraint failed?

Пишу регистрацию боту в телеграм с помощью библиотеки Aiogram с использованием SQLite.
Регистрация проходит успешно, но при повторном "входе" пользователя, когда система должна проверить наличие его уникального ID в базе данных и, если этот ID есть в базе, то перекинуть пользователя на меню, минуя регистрацию, выдается ошибка:
cur.execute("INSERT INTO 'users' ('user_id', 'username', 'first_name', 'last_name') VALUES (?, ?, ?, ?)",
sqlite3.IntegrityError: UNIQUE constraint failed: users.user_id


Прилагаю код бота:
async def cmd_start(message: types.Message):
    isreg = await sqlite_db.user_exists(message.from_user.id)
    if not isreg:
        await sqlite_db.add_user(message.from_user.id,
                               message.from_user.username,
                               message.from_user.first_name,
                               message.from_user.last_name)
        await message.answer(text=TEXT_CMD_START1, parse_mode='HTML')
        await message.answer(text=TEXT_CMD_START2, reply_markup=kb_start1, parse_mode='HTML', disable_web_page_preview=True)
    else:
        await message.answer(text=TEXT_CMD_MENU, reply_markup=kb_menu, parse_mode='HTML')


Код базы данных:
async def add_user(user_id, username, first_name, last_name):
    cur.execute("INSERT INTO 'users' ('user_id', 'username', 'first_name', 'last_name') VALUES (?, ?, ?, ?)",
                (user_id, username, first_name, last_name,))
    db.commit()

async def user_exists(user_id):
    result = cur.execute("SELECT * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
    return bool(len(result))


Скорее всего проблема в том, что, даже если пользователь зарегистрирован, то условие IF все равно пропускает его на регистрацию почему-то.
Не уверен на 100%, что это так, но вероятно, что так и есть.
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Ахаха, я наконец увидел. Я уже отвечал на этот вопрос.
Причём, судя по всему, тому же самому клиенту.

Ну что ж за мания такая, писать имена полей в одинарных кавычках? Откуда эта глупость?
Если это тот же самый клиент, то почему такая необучаемость? Если другой, то это значит какой-то очередной сетевой гуру так вещает? И где можно припасть к источнику его мудрости?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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