Этот вопрос закрыт для ответов, так как повторяет вопрос Как сделать проверку SQLite, Python?
@qwwwwwty

Не работает условие Python, SQLite как решить и почему?

У меня есть условие, при котором бот должен найти определенный чат айди, который должен равняться "1". айди чата получено из сообщения пользователя.

@dp.message_handler(commands=["me"],commands_prefix="!/")
async def cmd_me(message: types.Message):
	
	connect = sqlite3.connect('INFO.db')
	cursor = connect.cursor()
	
	chat_verification = {message.chat.id}
	check = cursor.execute(f"SELECT chat_id FROM chat_id_table WHERE chat_id ='{chat_verification}' AND verification = 1")
	 	
	if check is True:
	  	await bot.send_message(message.chat.id, text = "да")
	else:
		await bot.send_message(message.chat.id, text = "ошибка")


консоль никаких ошибок не выдает. по задумке, пользователь пишет команду, на которую бот реагирует с условием. если verification имеет значение "1", то бот выполняет команду, любое другое - пишет "ошибка".

UPD: в любом исходе, выставленное значение в БД, хоть 1, или 0, или 3 - исход один, бот пишет "ошибка"
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
1. chat_verification = {message.chat.id}
chat_verification - это множество из одного элемента, вместо простого значения. Зачем?
2.
cursor.execute(f"SELECT chat_id FROM chat_id_table WHERE chat_id ='{chat_verification}' AND verification = 1")

Никогда не используй f-строки. С целыми числами прокатит, со строками - очень рискованно. Используй подстановку параметров.
cursor.execute("SELECT chat_id FROM chat_id_table WHERE chat_id = ? AND verification = 1", (message.chat.id, ))

3.
check = cursor.execute(...
if check is True:

execute() вернёт ссылку на всё тот же cursor, независимо от запроса. Тебе нужно выбрать строку из этого курсора с помощью метода fetchone(). Метод вернёт или кортеж с одним значением chat_id, или None, если ни одна строка не удовлетворяет условию.
cursor.execute("SELECT chat_id FROM chat_id_table WHERE chat_id = ? AND verification = 1", (message.chat.id, ))
result = cursor.fetchone()
if result is None:
    print('Нет такой строки')
else:
    chat_id = result[0]
    print('есть результат:', chat_id)
Ответ написан
Ответы на вопрос 1
fenrir1121
@fenrir1121
Начни с документации
chat_verification = {message.chat.id}
check = cursor.execute(f"SELECT chat_id FROM chat_id_table WHERE chat_id ='{chat_verification}' AND verification = 1

Вооружайтесь принтами и смотрите что вы наговнокодили в этих двух строчках.
Примерно каждый второй вопрос в SQLite сводится к ответу не используйте f строки в SQL запросах
И вы вообще осознаете какой тип данных у chat_verification?

В целом если 10 строчек кода требуют двух вопросов на хабре берите за привычку разбираться какими данными и типами данных вы манипулируете. Не работает - запускаете отладчик или принтуете и смотрите соответствуют ли данные и типы данных вашим ожиданиям.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы