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