繁体   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