簡體   English   中英

使用Python提高數據庫查詢速度

[英]Improving database query speed with Python

編輯 - 我正在使用Windows 10

對於MS SQL數據庫,是否有更快的替代pd._read_sql_query?

我正在使用pandas來讀取數據並在數據上添加一些列和計算。 我現在已經刪除了大部分的改動,我基本上只是閱讀(每天1-2萬行,我的查詢是讀取前一天的所有數據)數據並將其保存到本地數據庫(Postgres的)。

我連接的服務器遍布全球,除了查詢數據外,我沒有任何權限。 如果可能的話,我希望解決方案保留在Python中。 我想加快速度並消除任何開銷。 此外,您可以看到我暫時將文件寫入磁盤,然后將其打開到COPY FROM STDIN。 有沒有辦法跳過文件創建? 它有時超過500mb,這似乎是浪費。

engine = create_engine(engine_name)
query = 'SELECT * FROM {} WHERE row_date = %s;'
df = pd.read_sql_query(query.format(table_name), engine, params={query_date})
df.to_csv('../raw/temp_table.csv', index=False)
df= open('../raw/temp_table.csv')
process_file(conn=pg_engine, table_name=table_name, file_object=df)

更新:

您還可以嘗試使用bcp實用程序卸載數據,與pd.read_sql()相比,這可能要快得多,但您需要Microsoft Command Line Utilities for SQL Server安裝Microsoft Command Line Utilities for SQL Server

之后你可以使用PostgreSQL的COPY ... FROM ... ......

老答案:

您可以嘗試將DF直接寫入PostgreSQL(跳過df.to_csv(...)df= open('../raw/temp_table.csv')部分):

from sqlalchemy import create_engine

engine = create_engine(engine_name)
query = 'SELECT * FROM {} WHERE row_date = %s;'
df = pd.read_sql_query(query.format(table_name), engine, params={query_date})

pg_engine = create_engine('postgresql+psycopg2://user:password@host:port/dbname')
df.to_sql(table_name, pg_engine, if_exists='append')

只是測試它是否比COPY FROM STDIN更快......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM