我刚开始使用sqlite3和python.我想知道之间的区别:
cursor = db.execute("SELECT customer FROM table")
for row in cursor:
print row[0]
Run Code Online (Sandbox Code Playgroud)
和
cursor = db.execute("SELECT customer FROM table")
for row in cursor.fetchall():
print row[0]
Run Code Online (Sandbox Code Playgroud)
除了cursor是<type 'sqlite3.Cursor'>和cursor.fetchall()是<type 'list'>,它们都有相同的结果.
是否存在差异,偏好或特定情况,其中一个比另一个更优先?
CL.*_*CL. 10
fetchall() 将所有记录读入内存,然后返回该列表.
迭代游标本身时,只在需要时读取行.当您拥有大量数据并且可以逐个处理行时,这会更有效.
主要区别正是对 的调用fetchall()。通过发出fetchall(),它将返回一个list对象,其中填充了初始查询中剩余的所有元素(如果还没有得到任何元素,则为所有元素)。这有几个缺点:
当您改为使用cursor迭代器 ( for e in cursor:) 时,您会延迟获取查询的行。这意味着,只有在程序需要时才一一返回。
当然,您的两个代码片段的输出是相同的,但在内部使用fetchall()和 using only之间存在巨大的性能缺陷cursor。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
7027 次 |
| 最近记录: |