Pandas to_sql 返回 cx_Oracle.数据库错误: ORA-00942: 表或视图不存在



熊猫to_sql不起作用。

我使用 sqlalchemy 初始化我的引擎。我也cx_Oracle进口以防万一。出于测试目的,我使用了 pandas 提供的代码示例。DataFrame.to_sql文档。下面是一个示例:

import pandas as pd
from sqlalchemy import create_engine
import cx_Oracle
# specify oracle connection string
oracle_connection_string = (
    'oracle+cx_oracle://{username}:{password}@' +
    cx_Oracle.makedsn('{hostname}', '{port}', service_name='{service_name}')
)
# create oracle engine
engine = create_engine(
    oracle_connection_string.format(
        username='username',
        password='password',
        hostname='aaa.aaa.com',
        port='1521',
        service_name='aaa.aaa.com',
    )
)
# test to_sql
# Create a table from scratch with 3 rows
df = pd.DataFrame({'name' : ['User 1', 'User 2', 'User 3']})
df.to_sql('schema.table_name', con=engine, if_exists='replace', index_label='id')
engine.execute("SELECT * FROM schema.table_name").fetchall()

如果一开始没有创建表,我将收到"ORA-00942:表或视图不存在"错误。否则,我只会得到一个空白列表。

仅供参考,我已经测试了read_sql功能并且可以正常工作。我尝试的另一种方法是在参数语句中指定架构,请参阅评论部分中提供的链接。

据我了解,炼金术也叫cx_Oracle。但是,使用cx_Oracle插入是有效的。

只是想知道以前是否有人经历过这种情况。谢谢。

> Pandas 在默认架构下(使用带引号的标识符(将您的表命名为schema.table_name,而不是在架构schema下命名表table_name。使用关键字参数schema来定义它:

df.to_sql('table_name', schema='schema', con=engine, if_exists='replace', index_label='id')

我的猜测是,您以与to_sql类似的方式将架构和表名称传递给read_sql,因此它有效,因为它引用了标识符,而您的原始查询则没有。

最新更新