gpt4 book ai didi

oracle - 如何使用to_sql将pandas数据帧写入oracle数据库?

转载 作者:行者123 更新时间:2023-12-03 01:20:07 34 4
gpt4 key购买 nike

我是一个新的 Oracle 学习者。我正在尝试将 pandas 数据帧写入 oracle 表中。经过网上研究,我发现代码本身很简单,但我不知道为什么我的代码不起作用。

我已经从本地文件中读取了 pandas 数据框:

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")

现在打印 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

然后我使用 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()

显示错误:

DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ORA-01036: illegal variable name/number

如何解决这个问题?非常感谢您的宝贵时间!

最佳答案

我在 SO 上看到过类似的问题 - 当您尝试使用 cx_Oracle 创建的连接对象写入 Oracle DB 时,就会发生这种情况。

尝试使用 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')

关于oracle - 如何使用to_sql将pandas数据帧写入oracle数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540837/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com