[英]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.