【发布时间】:2020-05-13 17:44:00
【问题描述】:
我正在使用 sqlalchemy 和 pandas 将数据框加载到 Oracle 数据库。由于'multi'方法允许批量上传,我选择了该方法。我的熊猫版本是 1.0.1。但是我得到如下错误:
具有当前数据库版本设置的“oracle”方言不支持就地多行插入。
from sqlalchemy import create_engine
oracle_connection_string = (
'oracle+cx_oracle://{username}:{password}@' +
cx_Oracle.makedsn('{hostname}', '{port}', service_name='{service_name}'))
engine = create_engine(oracle_connection_string.format(
username='abc',
password='123',
hostname='bcd',
port='1234',
service_name='xyz.com',fast_executemany=True))
cleandata.to_sql('table', con = engine,schema = 'ht', if_exists='replace',index = False, method = 'multi')
到目前为止,我没有看到任何有相同问题的帖子。你知道如何解决这个问题吗? P.s:当我消除方法 multi 时,代码有效。但是对于 10 条记录,运行需要 2 分钟。那代价太大了。我的表将有 4000 条记录。这就是为什么我在 Python 上寻找快速加载方法的原因。谢谢!
【问题讨论】:
-
Oracle 客户端库和 Oracle DB 的版本是什么? FWIW,批量加载的 cx_Oracle 文档是 here,如果您需要使用原始 cx_Oracle。
-
我将批量加载作为附加文档进行。事实上,它减少了 95% 的时间。我会坚持建议。谢谢
标签: python oracle sqlalchemy etl