熊猫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
,因此它有效,因为它引用了标识符,而您的原始查询则没有。