私は新しい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:SQL 'SELECT name FROM sqlite_master WHERE type =' table 'AND name = ?;'で実行に失敗しました:ORA-01036:無効な変数名/番号
問題を解決する方法は?お時間をありがとうございました!
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')
_