代码之家  ›  专栏  ›  技术社区  ›  user3690132

Python,SQLalchemy对象长度

  •  1
  • user3690132  · 技术社区  · 6 年前

    使用SQLAlchemy执行select之后,我想检查响应的长度,当我将len()函数的值赋给变量时,它会更改值

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

    输出如下:

    1
    0
    

    为什么第二个值不等于1?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Ctrl-C Shane Holloway    6 年前

    因为它是在第一个命令之后使用的迭代器。在这种情况下,请尝试先列出:

    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 对象,这是 范围(5) .第二个首先创建了一个列表-它接受具有 __next__ 已实施。这 __下一个__ 返回值,直到迭代器结束。然后,当我们有一个包含来自迭代器的所有值的列表时,我们只需要打印列表。

    我们为什么需要它?因为某些数据可能需要计算或很长,所以您可能希望在请求其他零件之前先对其进行处理。或者你有一个摄像头和一个迭代器,它总是给出最新的帧(或者等待下一帧)。这是一个有用的概念 发电机