私は新しいoracle学習者です。私はpandasデータフレームをoracleテーブルに書き込もうとしています。私はオンラインで研究を行った後、コード自体が非常にシンプルだとわかりましたが、私のコードがなぜ機能しないのか分かりません。to_sqlを使用してpandasデータフレームをOracleデータベースに書き込む方法は?
私は私のローカルファイルからパンダのデータフレームを読みました:その後、私は使用して、データベースとの接続を作成
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
:
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は、このようなことSHOLD、dfを印刷cx_Oracle、それは動作します。次に、データフレームdfをテーブルTESTに書き込もうとします。この表TESTは、Oracleデータベースにすでに存在する空の表であり、OracleにDATE、YEAR、MONTH、SOURCE、DESTINATIONなどの列があります。すべてのデータ型がdfサンプルデータと一致します。次のように私のコードは次のとおりです。
conn_str = u'account/[email protected]: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
問題を解決する方法は?あなたのお時間をありがとうございました!
ありがとうございました。 ORA-01950:表領域 'xxx_DATA'に対する権限がありません。(SQL: 'INSERT INTO' TEST '( "索引"、 "日付"、 "年"、 "月"、 ...)VALUE(: "index"、: "DATE"、:YEAR、...)] –
@HavenShi、これは別の話です。つまり、あなた(またはあなたのDBA)はそのoracleユーザーのためにその表スペースにクォータを追加する必要があります。私はあなたの元の質問に答えていると思う;-) – MaxU
、あなたはテーブルスペースについてもう少し説明できますか?私はOracleテーブルTESTに直接書き込むことができます。何が恋しいですか? –