【发布时间】: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的问题。但是整数列MENGE和CNT...当我尝试单独插入数据点时,这些列的错误是:'无效的参数类型。参数索引=0 参数类型=numpy.int64', 'HY105' -
您可以尝试使用 SQLAlchemy 的 Oracle dialect 和 pandas 的 to_sql 方法。这可能有助于避免 numpy 和数据库访问层之间类型不兼容的问题。
标签: sql oracle pandas insert pyodbc