ARKRAFTER
@ARKRAFTER
Web-разработчик , делаю ботов для дискорда на Py

Постоянно else хотя должно бить True как исправить?

@client.command()
async def addblack(ctx,userid):
	owner = 634060873731670018
	author = ctx.message.author
	if author.id == owner:
		sql.execute(f'SELECT userid FROM badusers')
		if sql.fetchone() is None:
			sql.execute(f'INSERT INTO badusers VALUES (?) ', ({userid}))
			db.commit()
			await ctx.send('готово!')
		else:
			await ctx.send('он уже есть в бд!')
	else:
		await ctx.send('вы не имеете достаточного права чтоб добавлять его как крашера!')

Постоянно виводится он уже есть в бд! хотя его там нет
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@o5a
Потому что неправильно используете SQL. Запрос выбирает все записи из badusers, а не только конкретного user_id. Насколько вижу, предполагается проверить, есть ли user и занести.
sql.execute(f'SELECT userid FROM badusers WHERE user_id = ?', (user_id, ))

А лучше добавить уникальный индекс/первичный ключ по этому user_id и не придется делать проверки перед добавлением.

Во-вторых, неправильный синтаксис в execute для INSERT, не нужно там фигурных скобок, просто
sql.execute(f'INSERT INTO badusers VALUES (?) ', (userid, ))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Смотри что sql.fetchone() возвращает. Там явно что-то есть, но не None.
Ответ написан
Ваш ответ на вопрос

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

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