所以如果我这样做
import MySQLdb
conn = MySQLdb.connect(...)
cur = conn.cursor()
cur.execute("SELECT * FROM HUGE_TABLE")
print "hello?"
print cur.fetchone()
在我看来,MySQLdb 在到达“打印”之前就获取了整个大表。
我之前假设它在后台进行了某种“光标/状态”延迟检索,
但对我来说看起来不像。
这是正确的吗?如果是这样,是因为必须这样还是由于限制
MySQL 有线协议?这是否意味着 java/hibernate 的行为方式相同?
我想如果我想演练的话我需要使用“limit 1”MySQL子句和相关子句
一张大桌子却不能一次把所有东西都拉进去?或没有?提前致谢。
In the _mysql
模块,使用以下调用:
conn.use_result()
这告诉连接您想要逐行获取行,将其余行保留在服务器上(但保持游标打开)。
替代方案(也是默认方案)是:
conn.store_result()
这告诉连接在执行查询后获取整个结果集,后续的获取将仅迭代结果集,该结果集现在位于 Python 应用程序的内存中。如果你的结果集非常大,你应该考虑使用LIMIT
将其限制为您可以处理的事情。
请注意,在您从未打开的查询中获取所有行之前,MySQL 不允许运行另一查询。
In the MySQLdb模块,相当于使用这两个不同的光标对象之一MySQLdb.cusrors
:
- 光标使用结果混合
- CursorStoreResultMixIn
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)