使用 "c.fetchall()" 与仅将 "c.execute(SELECT...." 分配给变量有什么区别?
What's the difference between using "c.fetchall()" vs. just assigning "c.execute(SELECT...." to a variable?
我很确定它们在大多数情况下在功能上是相同的,但我想知道是否在某些情况下它们不相同,以及背后发生了什么?
示例:
c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,))
results = c.fetchall()
player_list = []
for player in results:
player_list.append(player)
对比
results = c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,))
player_list = []
for player in results:
player_list.append(player)
Python DBAPI 没有定义什么 execute
return:它可能是一个生成器,它可能是一个结果列表,它可能是一些自定义对象代表结果等。它只承诺将进行数据库查询;未定义如何呈现或提供结果。
然而,fetch_all
方法被定义为 return 和 "sequence of sequences",这意味着您会立即在内存中获得实际的实例化结果。特别是迭代结果不会触发延迟的数据库连接来执行查询或获取更多结果。
这样做的一个结果是实现可以 将您的两种方法定义为等效的,但不需要。
我很确定它们在大多数情况下在功能上是相同的,但我想知道是否在某些情况下它们不相同,以及背后发生了什么?
示例:
c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,))
results = c.fetchall()
player_list = []
for player in results:
player_list.append(player)
对比
results = c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,))
player_list = []
for player in results:
player_list.append(player)
Python DBAPI 没有定义什么 execute
return:它可能是一个生成器,它可能是一个结果列表,它可能是一些自定义对象代表结果等。它只承诺将进行数据库查询;未定义如何呈现或提供结果。
然而,fetch_all
方法被定义为 return 和 "sequence of sequences",这意味着您会立即在内存中获得实际的实例化结果。特别是迭代结果不会触发延迟的数据库连接来执行查询或获取更多结果。
这样做的一个结果是实现可以 将您的两种方法定义为等效的,但不需要。