Skip to content
Snippets Groups Projects

Resolve "Implement server-side cursors"

Merged Laurens Oostwegel requested to merge 9-implement-server-side-cursors into main
+ 22
0
@@ -21,6 +21,7 @@ import logging
import sqlite3
import psycopg2
from packaging import version
from uuid import uuid4
logger = logging.getLogger()
@@ -245,3 +246,24 @@ class PostGISDatabase(AbstractDatabase):
self.cursor = self.connection.cursor()
except Exception as e:
logger.exception(e)
def execute_server_side(self, sql_statement: str, itersize: int = None):
"""
Execute an SQL statement with a server-side cursor.
Args:
sql_statement (str):
SQL statement to be executed.
itersize (int):
Number of rows fetched from the server at one call.
Returns:
Generator object of the query result.
"""
with self.connection.cursor(name=f"{uuid4()}") as cursor:
if itersize is not None:
cursor.itersize = itersize
cursor.execute(sql_statement)
for result in cursor:
yield result
Loading