Python, длина объекта SQLalchemy - PullRequest
0 голосов
/ 10 мая 2018

После выполнения выбора с использованием SQLAlchemy я хотел бы проверить длину ответа, и когда я присвоил значение функции len () переменной, он изменит значение

print(len(SQLAlchemyResult.fetchall()))
w=len(SQLAlchemyResult.fetchall())
print(w)

, и результат будет следующим:

1
0

Почему второе значение не равно 1?

1 Ответ

0 голосов
/ 10 мая 2018

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

results = list(SQLAlchemyResult.fetchall())
print(len(results))
print(len(results))

Вывод:

1
1

Что такое итератор?Это объект, который может создавать несколько значений.Может быть, у них есть все они уже внутри, может быть, он должен сделать определенную работу, чтобы произвести следующую.Например, у вас есть range(5).Это итератор.Попробуйте это:

print(range(5))
print(list(range(5)))

Вывод:

range(5)
[0, 1, 2, 3, 4]

Первая команда, которая только что называла __str__ метод объекта range, и это была range(5).Второй сначала создал список - он принимает итерируемые объекты, которые реализовали __next__.Этот __next__ возвращает значения до конца итератора.Затем, когда у нас есть список со всеми значениями из итератора, у нас просто распечатывается список.

Зачем нам это нужно?Поскольку некоторые данные могут нуждаться в вычислениях или являются слишком длинными, вы можете сначала обработать их, прежде чем запрашивать другую часть.Или, может быть, у вас есть камера и у вас есть итератор, который всегда выдает последний кадр (или ждет следующего).Это полезная концепция наряду с генераторами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...