create_engine() 在 sqlalchemy 中做什么?

时间:2021-01-08 05:56:24

标签: python pandas sqlalchemy

我的目标是将 Pandas 数据帧推送到红移。 stackoverflow 问题之一建议使用以下代码直接将数据帧转换为 redshift(节省将文件转换为 csv 然后运行复制命令的工作)

import pandas as pd
from sqlalchemy import createengine
conn = create_engine('postgresql://fin:password@yoururl.com:8192/yourdatabase')
df=pd.DataFrame({'col1': [1,2], 'col2': ['A','B']}
df.to_sql('tablename', conn, index=False, if_exists='replace')

仅仅插入这两行需要 35.47 秒,这是非常慢的。 我试图了解这太慢的原因。我在浏览文章时遇到了以下术语。
1。 ORM- 更像是面向对象语言到表之间的翻译层。
2。引擎 - 在数据库上下文中,它是 DBMS 用来执行 CRUD 操作的软件。
3。驱动程序 - 用于连接到 dbms 的软件。
我的问题是:
1。 sqlalchemy 是否为我的本地创建了一个单独的引擎,然后使用 psycopg2 驱动程序将其推送到红移?
2。如果不是,那么它缓慢的原因可能是什么。很少有文章提到它一次插入一行,即使当我运行 insert into mytablename values(1,'A') 它在不到 1-2 秒内完成。所以两倍的行应该是 ~4 秒。
3。由于 ORM 层将 python 命令转换为 sql 可执行命令,因此与我通过 pycopg2(或在我的情况下使用 pg8000)使用 sql 查询相比,肯定需要额外的时间。但这是否意味着将python对象转换为sql可执行查询需要25-30秒?

0 个答案:

没有答案
相关问题