使用python从PostgreSql中选择大量行的速度非常慢

2024-06-01 02:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python执行一个select查询,它有超过200000个结果/行。输出200000行的同一查询在DB_引擎(Dbeaver)上大约需要10-15秒,但在尝试使用python执行时,大约需要6分钟。我使用的是psycopg2,SQLALCHEMY引擎

engine = create_engine(SQLALCHEMY_DATABASE_URI, poolclass=NullPool)
conn = engine.raw_connection()
cursor = conn.cursor()
cursor.execute(query)

有谁能建议将其优化到Dbeaver输出时间级别的方法吗

尝试的其他方法:

  • 第1部分:

     df = pd.DataFrame()  
     dfl = []
     for chunk in pd.read_sql_query( query, con=engine ,chunksize=5000):
       print('chunk from PSQL', chunk)
     # Start Appending Data Chunks from PSQL Result set into List
       dfl.append(chunk)
     # Start appending data from list to dataframe
       df = pd.concat(dfl, ignore_index=True)
    

第2部分:

    with tempfile.TemporaryFile() as tmpfile:
        copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
            query=query, head="HEADER"
        )
        conn = engine.raw_connection()
        cur = conn.cursor()
        cur.copy_expert(copy_sql, tmpfile)
        tmpfile.seek(0)
        df = pd.read_csv(tmpfile)
        tmpfile.close()

Tags: from引擎dfsqlsqlalchemyconnquerycursor