【问题标题】:Python: Load Oracle table directly from Pandas (write to Oracle)Python:直接从 Pandas 加载 Oracle 表(写入 Oracle)
【发布时间】:2018-10-12 09:31:45
【问题描述】:

有没有办法从 Pandas 将数据直接加载到 Oracle 表中。

目前我正在将数据集写入 csv 文件,然后加载表格。我想绕过“写入 csv”步骤。

我使用cx_Oracle 连接到Oracle 数据库。 url 在调用 python 脚本时作为参数传递。结果将作为 pandas 数据框存储在变量 dataset 中。数据集布局和表定义相同。

    import cx_Oracle as cx
    response = requests.get(url)
    data = response.json()
    dataset = json_normalize(data['results'])

如果您需要任何进一步的信息,请告诉我。

【问题讨论】:

  • 几乎每个数据管道中的每个操作都需要生成一个 CSV 文件并将其传递到下一步。
  • @APC 当您只需要执行一些操作时,您可以直接从数据库或源中读取。
  • @harsh - 我正在 - 或试图 ba - 幽默。对于造成的任何混淆,我们深表歉意。
  • 抱歉,如果有任何混淆。问题是关于从 pandas 数据帧写入 Oracle 而不是从 Oracle 读取。目前,我一直将其写入 csv 文件,然后写入 Oracle。但我想知道我是否可以绕过这一步。如果我可以绕过它来处理一些数据加载,那就太好了。对于管道中的大多数进程,我们将其写入 csv。

标签: python sql python-3.x oracle pandas


【解决方案1】:

您是否尝试过 pandas 模块中的 to_sql 函数?

from sqlalchemy import create_engine
engine = create_engine('oracle://[user]:[pass]@[host]:[port]/[schema]', echo=False)
dataset.to_sql(name='target_table',con=engine ,if_exists = 'append', index=False)

【讨论】:

  • 不,问题是写入 Oracle(从 Pandas 加载表)
  • @:harsh - 实际上的问题是关于从 pandas 写入 Oracle 表。所以这似乎是一个合理的回应。
  • @F.J 我试过了,但它说“InvalidRequestError:无法反映:请求的表在引擎中不可用”;但是表的名称存在并且相同,因为首先我收到了另一条带有无效标识符的消息:“DatabaseError: (cx_Oracle.DatabaseError) ORA-00904: "population": invalid identifier" 并且我更正了列的名称。跨度>
  • 我的错。当我放 if_exists = 'append' 时它正在工作,我想如果我放 if_exists = 'replace' 似乎不起作用,我可以截断并重新加载。
猜你喜欢
  • 1970-01-01
  • 2011-07-08
  • 2020-08-28
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多