如何从POSTGRES中读取1000万行并将数据写入python中的CSV ?



我试图在一个表上运行一个查询,其中有大约1000万行。基本上,我正在尝试运行Select * from events,然后将其写入CSV文件。

代码如下:

with create_server_connection() as connection:
cursor = connection.cursor()
cursor.itersize = 20000
cwd = os.getcwd()
query = open( sql_file_path, mode='r').read()
print(query)
cursor.execute(query)
with open(file_name, 'w', newline='')as fp:
a = csv.writer(fp)
for row in cursor:
a.writerow(row)  
def create_server_connection():
DB_CONNECTION_PARAMS = os.environ["DB_REPLICA_CONNECTION"]
json_object = json.loads(DB_CONNECTION_PARAMS)
try:
conn = psycopg2.connect(
database=json_object["PGDATABASE"], user=json_object["PGUSER"], password=json_object["PGPASSWORD"], host=json_object["PGHOST"], port=json_object["PGPORT"]
)  
except psycopg2.OperationalError as e:
print('Unable to connect!n{0}').format(e)
sys.exit(1)
return conn

然而,由于某种原因,整个过程占用了大量内存。我将此作为aws批处理进程运行,该进程退出时出现此错误OutOfMemoryError: Container killed due to memory usage

有没有减少内存使用的方法?

来自psycopg2文档:

当执行数据库查询时,Psycopg游标通常获取后端返回的所有记录,并将它们传输到客户端进程。如果查询返回了大量的数据,那么客户端将按比例分配大量的内存。

如果数据集太大而无法在客户端实际处理,则可以创建服务器端游标。使用这种游标,可以只向客户端传输一定量的数据,这样就可以检查大型数据集,而不必将其全部保存在内存中。