Psycopg2 - 如何进行大型查询 - 超过 100 万行
Psycopg2 - How to Do Large Query - 1 Million Plus Rows
所以我正在尝试从本地的 postgresql 数据库进行大量查询。
'processrecords' 函数,returns 一个恶意软件对象列表,我假设每次服务器端光标 运行 时我都需要向主列表添加一个新列表.
我有点困惑,我该如何正确执行此操作。
我认为我需要使用服务器端游标,否则程序 运行 会因 Psycopg2 内存不足。但我听说过有关服务器端游标的好消息。
with connection:
cursor = connection.cursor()
with cursor:
cursor.itersize = 20000
cursor.execute("SELECT malware_id, malwarehashmd5, malwarehashsha1, malwarehashsha256g FROM malwarehashesandstrings")
listoffetchedmalware = cursor.fetchall()
listofmalwareobjects = processrecords(listoffetchedmalware)
Psycopg wraps the database server side cursor in named cursors. A named cursor is created using the cursor() method specifying the name parameter.
尝试:
with connection:
cursor = connection.cursor('my_cursor')
...
但是,fetchall()
仍然会同时 return 所有行。如果要处理桶中的数据,请在循环中使用 fetchmany()
,例如
with connection.cursor(name="my_cursor") as cursor:
cursor.itersize = 20000
cursor.execute(the_query)
listoffetchedmalware = cursor.fetchmany(cursor.itersize)
while len(listoffetchedmalware) > 0:
listofmalwareobjects = processrecords(listoffetchedmalware)
listoffetchedmalware = cursor.fetchmany(cursor.itersize)
所以我正在尝试从本地的 postgresql 数据库进行大量查询。
'processrecords' 函数,returns 一个恶意软件对象列表,我假设每次服务器端光标 运行 时我都需要向主列表添加一个新列表.
我有点困惑,我该如何正确执行此操作。
我认为我需要使用服务器端游标,否则程序 运行 会因 Psycopg2 内存不足。但我听说过有关服务器端游标的好消息。
with connection:
cursor = connection.cursor()
with cursor:
cursor.itersize = 20000
cursor.execute("SELECT malware_id, malwarehashmd5, malwarehashsha1, malwarehashsha256g FROM malwarehashesandstrings")
listoffetchedmalware = cursor.fetchall()
listofmalwareobjects = processrecords(listoffetchedmalware)
Psycopg wraps the database server side cursor in named cursors. A named cursor is created using the cursor() method specifying the name parameter.
尝试:
with connection:
cursor = connection.cursor('my_cursor')
...
但是,fetchall()
仍然会同时 return 所有行。如果要处理桶中的数据,请在循环中使用 fetchmany()
,例如
with connection.cursor(name="my_cursor") as cursor:
cursor.itersize = 20000
cursor.execute(the_query)
listoffetchedmalware = cursor.fetchmany(cursor.itersize)
while len(listoffetchedmalware) > 0:
listofmalwareobjects = processrecords(listoffetchedmalware)
listoffetchedmalware = cursor.fetchmany(cursor.itersize)