Hav*_*Shi 5 oracle cx-oracle dataframe pandas pandas-to-sql
我是一名新的oracle学习者。我正在尝试将pandas数据框写入到oracle表中。在网上进行研究之后,我发现代码本身非常简单,但是我不知道为什么我的代码不起作用。
我已经从本地文件中读取了熊猫数据框:
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")
Run Code Online (Sandbox Code Playgroud)
现在打印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
Run Code Online (Sandbox Code Playgroud)
然后,我使用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()
Run Code Online (Sandbox Code Playgroud)
它显示错误:
DatabaseError:在sql'SELECT name from sqlite_master WHERE type ='table'AND name = ?;'上执行失败:ORA-01036:非法变量名称/编号
如何解决问题?非常感谢您的宝贵时间!
我曾在SO上看到过类似的问题-当您尝试使用由创建的连接对象写入Oracle DB时,就会发生这种情况cx_Oracle。
尝试使用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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13672 次 |
| 最近记录: |