cursor.fetchmany与DECLARE BINARY CURSOR和FETCH

red*_*ice 5 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()
Run Code Online (Sandbox Code Playgroud)

如alecxe python postgres给出的答案所示, 我可以fetchall()一百万行吗?

相较于:

while True:
    results = cursor.fetchmany(1000)
    if not results:
        break
    for result in results:
        yield result
Run Code Online (Sandbox Code Playgroud)

应该使用psycopg2或DECLARE BINARY中指定的fetchmany。

我假设fetchmany和DECLARE BINARY都在数据库服务器端设置了一个临时表...客户端是Apache服务器。

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

谢谢。

Ale*_*lex 0

我的数据库中有 1B 条记录,DECLARE BINARY CURSOR 解决方案可以立即迭代表,而 fetchmany 开始工作有很大的延迟,我认为这是因为预处理并将数据加载到内存中。所以就我而言,二进制游标更有效。