@stepuasha

Как решить проблему с SQLite3?

Возвращаю переменную в которую записано id пользователя:
def GetInfo(id):
        try:
            return c.execute("SELECT * FROM main WHERE user_id == ?", (id,))[0]
        except:
            pass


потом проверяю, если оно равно None: заношу пользователя в БД, если же нет, то вывожу специальный текст:
if DataBase.GetInfo(message.from_user.id) is None:
		bot.send_message(message.chat.id, '<b>Добро пожаловать в гости! \n\nДля оренитирования используй /menu</b>', 'html')
		bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAEF0K5jH0f88w0Ugs0W6n30eUwSZpV2TgACxwADMNSdEbWf7Uv9DdzuKQQ')
		DataBase.InsertInto(message.from_user.id)
	if DataBase.GetInfo(message.from_user.id) is not None:
		bot.send_message(message.chat.id, '<b>Эту команду можно мпользовать только единажды!</b>', 'html')
		bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAEF0S1jH1ZNQoKjHvOWzB_G3bgdq5crtgACzAADMNSdEbg0CDIOCTHMKQQ')


Когда пользователя в БД нету, всё работает как надо, но вот когда он там есть, и нужно вывести уже другой текст, программа по всей видимости в тупую игнорит условие и еще раз выводит привественное сообщение, хотя возвращаемое значение уже не None

также выводит такую ошибку:
sqlite3.IntegrityError: UNIQUE constraint failed: main.user_id
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
С чего ты взял, что возвращаемое значение второй раз будет не None? Ты проверял, что данные заносятся?
Собственно, в том и ошибка - у тебя уже есть запись с таким userid, второй раз вставить нельзя.

А твоя GetInfo() не работает. Почему? Внезапно, в SQL сравнение - это =, а не ==. А ошибку тебе не пишет, потому что ты сделал except: pass. За такую практику вообще надо бить по пальцам линейкой, надеюсь, ты теперь понял почему.
Ну и до кучи, если хочешь проверить существование, то лучше сделать запрос вида SELECT COUNT(*) FROM main WHERE user_id = ? или
SELECT EXISTS(SELECT * FROM main WHERE user_id = ?)
. Эти запросы гарантированно вернут одну строку с одним значением, 0 или 1. 0 - строка не существует, 1 - строка существует.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы