@alwaystried

Как дать понять питону, что если строка является 'null', то ее пробивать нельзя?

Добрый день, Хабр! Никак не могу понять одной вещи - как попросить питон НЕ пробивать строки без значения?

Ошибочный код:

cur = await conn.cursor()
teled = message.from_user.id
sql = "SELECT teleid FROM users WHERE teleid=(%s)"
id = teled
await cur.execute(sql, (id))
r = await cur.fetchone()
print(r)
a = r
d = "".join(c for c in a if c.isalnum()) #<---- тут и появляется ошибка. Этот метод необходим для удаления скобок, которые ставит pymysql при обычном fetchone


Из-за того, что данные о новых юзерах не всегда имеется, появляется данная ошибка. Этот код нужен чтобы проверять есть если человек в базе данных. Если нет - он приступает к фрагменту занесения в бд. И при проверке появляется следующее:

AttributeError: 'NoneType' object has no attribute 'isalnum'

Буду благодарен за любую помощь
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
До чего изобретателен может быть человек, не понимающий что он делает!
Ключевое слово: кортеж.
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('Беда')

Перед тем как писать ботов, освой азы языка, а? Структуры данных в частности.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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