使用Python提高数据库查询速度

时间:2016-10-10 15:05:53

标签: python pandas sqlalchemy

编辑 - 我正在使用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)

1 个答案:

答案 0 :(得分:0)

<强>更新

您还可以尝试使用bcp utility卸载数据,与pd.read_sql()相比可能要快得多,但您需要本地安装Microsoft Command Line Utilities for SQL Server

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

OLD回答:

您可以尝试直接将您的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 ...

相比是否更快
相关问题