我正在读取postgres表,提取数据并将其加载到csv文件中。我的问题是,我最多可以读取5gb TABLE并成功创建一个csv文件。我的一张表是35 GB,无法创建csv文件,该进程被终止。
我怀疑我的数据框无法处理大尺寸文件。
我们该如何解决这个问题并成功创建csv文件?
def table_to_csv(sql, file_path, dbname,port, user):
"""This function creates a csv file from PostgreSQL with query
"""
try:
conn = psycopg2.connect(dbname=dbname, port=port, user=user)
print("Connecting to Database")
# Get data into pandas dataframe
df = pd.read_sql(sql, conn)
# Write to csv file
df.to_csv(file_path, encoding='utf-8', header = True,doublequote = True, sep=',', index=False)
print("CSV File has been created")
conn.close()
except Exception as e:
print("Error: {}".format(str(e)))
sys.exit(1)
答案 0 :(得分:0)
由于您的数据库正在本地计算机上运行,因此最有效的选择可能是使用PostgreSQL's COPY
command,例如像
COPY table_name TO file_path WITH (FORMAT csv, ENCODING UTF8, HEADER);
PostgreSQL会将数据直接保存到文件本身,而无需立即将其全部读取到内存中或让您的Python代码完全读取它。
您应该能够通过psycopg2
的标准cursor.execute
function来运行它。当然,您也可以通过psql
或您选择的其他PostgreSQL客户端来运行它。
答案 1 :(得分:0)
这与Cursor及其复制专家功能一起使用。这是代码段
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
#execute
with open("/sample.csv", 'w') as fd:
cur.copy_expert("COPY sample TO STDOUT WITH (FORMAT CSV, HEADER TRUE,
FORCE_QUOTE *)", fd)