【问题标题】:pandas df.to_sql with oracle returns ORA-01008: not all variables bound带有 oracle 的 pandas df.to_sql 返回 ORA-01008:并非所有变量都绑定
【发布时间】:2021-01-04 09:20:02
【问题描述】:

我正在从 api 读取 csv,并且能够将其流式传输到 pandas 数据帧中。

df = pd.read_csv(iterable_to_stream(reply.iter_content()),
                                         skiprows=7,
                                         dtype=str,
                                         na_filter=False)

我检查了数据框,一切看起来都不错。然后想将该数据放入 Oracle 表中。它只有 65 行 VARCHAR2(100) 所以我这样做了

df.to_sql(name='KR_PERSON_DETAILS_CSV_PD',
          con=db.engine,
          index=False,
          if_exists='append',
          dtype={line: types.VARCHAR(100) for line in df.columns}
)

当我这样做时,我收到以下消息: sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-01008: 并非所有变量都绑定

这怎么可能?该表是在我运行它时创建的,我仔细检查了所有列。

【问题讨论】:

  • 你的连接字符串是什么?更改连接字符串可能会解决您的问题。类似的问题是here
  • 连接字符串是一个sqlalchemy引擎。 url =f"oracle+cx_oracle://user:password@{dsn}" self.engine = create_engine(url, echo=False, max_identifier_length=128)。它生成的 sql 看起来不错。

标签: python pandas oracle sqlalchemy


【解决方案1】:

我发现了问题。一些列名超过 30 个字符。我缩短了那些超过 30 个字符的列名,它可以工作

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2021-12-11
    • 2010-11-28
    • 1970-01-01
    • 2011-09-22
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多