我是一名新的oracle学习者。我正在尝试将pandas数据框写入到oracle表中。在网上进行研究之后,我发现代码本身非常简单,但是我不知道为什么我的代码不起作用。

我已经从本地文件中读取了 Pandas 数据框:

import cx_Oracle
import pandas as pd
import os

dir_path = os.path.dirname(os.path.realpath("__file__"))
df = pd.read_csv(dir_path+"/sample.csv")

现在打印df,数据框df的数据格式如下:
   DATE            YEAR     MONTH      SOURCE      DESTINATION
0  11/1/2017 1:00  2017     1          AL          CO
1  11/2/2017 1:00  2017     5          GA          ID
2  11/3/2017 1:00  2017     12         GA          MO

然后,我使用cx_Oracle创建与数据库的连接,它可以正常工作。接下来,我尝试将数据帧df写入表TEST中。该表TEST是一个空表,已经存在于oracle数据库中,它在oracle中具有包括DATE,YEAR,MONTH,SOURCE,DESTINATION在内的列。所有数据类型都与df样本数据匹配。我的代码如下:
conn_str = u'account/password@host:1521/server'
conn = cx_Oracle.connect(conn_str)

# Write records stored in a DataFrame to a oracle database
df.to_sql('TEST', conn, if_exists='replace') # the error shows here

conn.close()

它显示错误:



该如何解决呢?非常感谢您的宝贵时间!

最佳答案

我在SO上也看到过类似的问题-当您尝试使用cx_Oracle创建的连接对象写入Oracle DB时,就会发生这种情况。

尝试使用SQL Alchemy创建连接:

import cx_Oracle
from sqlalchemy import types, create_engine

conn = create_engine('oracle+cx_oracle://scott:tiger@host:1521/?service_name=hr')

df.to_sql('TEST', conn, if_exists='replace')

关于oracle - 如何使用to_sql将pandas数据框写入oracle数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47540837/

10-12 18:14
查看更多