Je suis un nouvel apprenant Oracle. J'essaie d'écrire un pandas dataframe dans une table Oracle. Après avoir fait des recherches en ligne, j'ai trouvé que le code lui-même est très simple, mais je ne sais pas pourquoi mon code ne fonctionne pas) t travailler.
J'ai lu le pandas dataframe de mon fichier local:
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")
Maintenant, imprimez df, le cadre de données df doit être comme ceci:
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
Ensuite, je crée une connexion avec la base de données en utilisant cx_Oracle, cela fonctionne. Ensuite, j'essaie d'écrire le fichier de données df dans le tableau TEST. Cette table TEST est une table vide qui existe déjà dans la base de données Oracle, elle contient des colonnes incluant DATE, YEAR, MONTH, SOURCE, DESTINATION dans Oracle. Tous les types de données correspondent aux exemples de données df. Mon code est le suivant:
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()
Il montre une erreur:
DatabaseError: Échec de l'exécution sur sql 'SELECT name FROM sqlite_master WHERE type =' table 'AND name = ?;': ORA-01036: nom/numéro de variable non valide
Comment résoudre le problème? Merci beaucoup pour votre temps!
J'ai vu des questions similaires sur SO - cela se produit lorsque vous essayez d'écrire dans Oracle DB à l'aide d'un objet de connexion créé par cx_Oracle
.
Essayez de créer une connexion à l'aide de 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')