cursor.fetchmany vs DECLARE BINARY CURSOR和FETCH

时间:2015-10-07 16:54:52

标签: python postgresql psycopg2

我不确定每种方法的最有效或缺点/优点是什么,或者它们在技术上是否相同?

那是

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服务器。

我正在使用的网站对用户输入数据库中的数据进行计算...因此需要加载大量数据以进行模式匹配。

谢谢。

1 个答案:

答案 0 :(得分:0)

我的数据库中有1B条记录,DECLARE BINARY CURSOR解决方案可以立即在表上进行迭代,而fetchmany有一个很大的启动延迟,我认为这是因为预处理并将数据加载到内存中。因此,在我的情况下,BINARY CURSOR效率更高。