You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用executemany从DataFrame注入数据时遇TypeError问题排查

错误原因与修复方案

核心错误原因

你遇到的TypeError是因为传给executemany的参数类型不符合要求。df.apply(lambda x: tuple(x), axis=1)返回的是pandas Series,调用.values后得到的是numpy.ndarray,而cx_Oracle的executemany只接受Python原生的序列列表(比如list of tuples)、字典列表,或者指定执行次数的整数。numpy数组不属于合法参数类型,哪怕里面的元素是元组也不行。

修复代码

修改injectData方法中参数传递的部分,把numpy数组转换成Python原生列表:

def injectData(self, tableSchema: str) -> None:
    df = pd.DataFrame(data)
    catList = dataColumns
    
    # 将每行转为元组后直接转成Python列表
    audience = df.apply(lambda x: tuple(x), axis=1).tolist()

    self._cursor.executemany(f"INSERT INTO {tableSchema}  ({catList})  VALUES (:1, :2, :3, :4, :5, :6)", audience)

或者用list()转换:

audience = list(df.apply(lambda x: tuple(x), axis=1))

额外检查点

  • 确认catList格式正确:dataColumns必须是用逗号分隔的列名字符串,比如"Id, Name, AaccountId, AaccountName, Type, Users",否则INSERT语句会出现语法错误。
  • 验证数据列数匹配:确保df的列数和INSERT语句中的占位符数量(6个)完全一致,避免因列数不匹配导致后续错误。
  • 示例数据的笔误:你提供的示例数据中,元组之间缺少逗号,实际代码中的data应该是合法的列表格式(比如[('xxx', ...), ('yyy', ...)]),否则生成DataFrame时就会报错。

内容的提问来源于stack exchange,提问作者joe_bill.dollar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:41:17