我不确定每种方法的最有效或缺点/优点是什么,或者它们在技术上是否相同?
那是
cursor.execute("DECLARE super_cursor BINARY CURSOR FOR SELECT names FROM myTable")
while True:
cursor.execute("FETCH 1000 FROM super_cursor")
rows = cursor.fetchall()
如alecxe给出的答案所表达的那样 python postgres can I fetchall() 1 million rows?
与之相比:
while True:
results = cursor.fetchmany(1000)
if not results:
break
for result in results:
yield result
应该使用psycopg2或DECLARE BINARY中指定的fetchmany。
我假设fetchmany和DECLARE BINARY都在数据库服务器端设置了一个临时表... 客户端是Apache服务器。
我正在使用的网站对用户输入数据库中的数据进行计算...因此需要加载大量数据以进行模式匹配。
谢谢。
答案 0 :(得分:0)
我的数据库中有1B条记录,DECLARE BINARY CURSOR解决方案可以立即在表上进行迭代,而fetchmany有一个很大的启动延迟,我认为这是因为预处理并将数据加载到内存中。因此,在我的情况下,BINARY CURSOR效率更高。