До чего изобретателен может быть человек, не понимающий что он делает!
Ключевое слово:
кортеж.
await cur.execute(sql, (id))
(id)
- это то же самое, что
id
.
А вот
(id,)
- это уже кортеж из одного элемента.
execute() как раз и ожидает вторым параметром кортеж, или иную коллекцию, где один элемент - это одно подставляемое значение.
Этот метод необходим для удаления скобок, которые ставит pymysql при обычном fetchone
"Скобки", как ты выразился - это потому что fetchone() возвращает кортеж, по одному элементу на значение в строке (ну или None если очередной строки нет). Т.е. для каждого пункта между SELECT и FROM будет один элемент в кортеже, в том же порядке. Ты запрашиваешь только teleid, поэтому получаешь кортеж из одного элемента.
Получить этот элемент можно, обратившись по индексу 0.
row = await cur.fetchone()
if row is not None: #есть хоть одна строка?
teleid = row[0]
# дальше делаешь что хочешь с teleid
else: # нет такой строки
print('Беда')
Перед тем как писать ботов, освой азы языка, а? Структуры данных в частности.