我执行下面的代码,这个例子的目的是在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()查询但上面的失败。
现在,我并不完全知道如何修复它,我对于使其工作的技术方面非常新,所以任何指向它的方向都会受到很大程度的关注。
感谢您的任何时间和投入!
答案 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')