通过pandas io SQL将表加载到Oracle

时间:2016-03-15 08:25:46

标签: python oracle pandas

我执行下面的代码,这个例子的目的是在Oracle数据库中创建一个查找表来加速我的数据加载。我要加载的表只是一个带ID值的向量,因此只加载一列。

代码编写如下:

lookup = df.id_variable.drop_duplicates()

conn = my_oracle_connection()
obj = lookup.to_sql(name = 'lookup', con = conn, if_exists = 'replace')

执行此操作时出现以下错误:

  

DatabaseError:sql' SELECT name FROM sqlite_master上的执行失败   WHERE type =' table' AND name =?;':ORA-01036:非法变量   名称/编号

我可以执行psql.read_sql()查询但上面的失败。

现在,我并不完全知道如何修复它,我对于使其工作的技术方面非常新,所以任何指向它的方向都会受到很大程度的关注。

感谢您的任何时间和投入!

2 个答案:

答案 0 :(得分:2)

使用cx_Oracle连接时遇到了同样的问题(我可以使用.read_sql函数,但不能使用.to_sql函数)

改为使用SQLalchemy连接:

import sqlalchemy as sa
oracle_db = sa.create_engine('oracle://username:password@database')
connection = oracle_db.connect()
dataframe.to_sql('table_name', connection, schema='schema_name', if_exists='append', index=False)

答案 1 :(得分:0)

我认为问题是使用cx_Oracle创建的连接对象写入Oracle DB时发生的。 SqlAlchemy可以解决:

import cx_Oracle
from sqlalchemy import types, create_engine

conn = create_engine('oracle+cx_oracle://Jeremy:SuperSecret@databasehost:1521/?service_name=gdw')

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