【问题标题】:inserting dataframe into Oracle Datebase using pyodbc: Error: ('HY000', 'The driver did not supply an error!')使用 pyodbc 将数据帧插入 Oracle 数据库:错误:('HY000','驱动程序未提供错误!')
【发布时间】:2019-06-07 09:02:08
【问题描述】:

我正在尝试使用 pyodbc 将数据帧插入 Oracle 数据库。我的代码如下所示:

pyodbc.pooling = False
conn_str = (
    r'DRIVER={Oracle in OraClient12Home1};'
    r'UID=***;'
    r'PWD=***;'
    ...
    ...)

conn = pyodbc.connect(conn_str, autocommit=True)
curs = conn.cursor()

curs.executemany('INSERT INTO TABLE.NAME(AUFTRAGNR, TYPNR, MENGE, CNT, LL_NR, LL_NR2, DATE) 
VALUES (?, ?, ?, ?, ?, ?, ?)', my_df.values.tolist())
curs.commit()
curs.close()

我要输入的数据框的一行是:

['0010930795', '231', 1, 1, nan, nan, Timestamp('2019-06-07 09:41:03')]

Access中各列的数据类型有:

AUFTRAGNR:短文
TYPNR:短文
MENGE:号码
CNT:号码
LL_NR:短文
LL_NR2:短文
@ 987654331@ 日期/时间

我得到的错误是:

错误: ('HY000', '驱动程序没有提供错误!')

由于错误消息的描述性不是很强,而且我的代码中没有看到任何明显的错误,所以我真的不知道如何解决这个问题。此错误的可能原因是什么?

任何帮助将不胜感激!

【问题讨论】:

  • 如果行不包含nan 值,您可以插入行吗?
  • 看来问题不是nan的问题。但是整数列MENGECNT ...当我尝试单独插入数据点时,这些列的错误是:'无效的参数类型。参数索引=0 参数类型=numpy.int64', 'HY105'
  • 您可以尝试使用 SQLAlchemy 的 Oracle dialect 和 pandas 的 to_sql 方法。这可能有助于避免 numpy 和数据库访问层之间类型不兼容的问题。

标签: sql oracle pandas insert pyodbc


【解决方案1】:

我最终弄清楚了问题所在。数据库中定义的数据类型 Number 指的是 floats 而不是 integers,因此以下输入将起作用:

['0010930795', '231', 1.0, 1.0, nan, nan, Timestamp('2019-06-07 09:41:03')]

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2018-11-14
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多