0
votes

Insérer des données dans la base de données Oracle à Python

Je ne peux pas insérer de données dans la base de données à l'aide d'une requête dynamique dans le script Python

ERROR: Failed to set dependencies informations : ORA-00933: SQL command not properly ended


10 commentaires

Vous ne devriez pas utiliser l'opérateur % pour insérer des valeurs dans votre SQL. xkcd.com/327


% s comme un espace réservé dans SQL est pas le même comme paramètre de formatage de chaîne en python


Query_String = "Insérer dans" + DEP_TABLE + "(client, sis, entité_name_1, entité_name_2, flag_dep, processus, flag_dep_det) valeurs (% s,% s,% s,% s,% s,% s,% s ); ", (" CO ", qo.db_src, qo.table_src, qo.table_des, qo.check_func, qo.table_des, aucun) . Vous ne pouvez pas paramétrer les noms de table, de sorte que vous aurez besoin de vétériner contre le schéma de la DB séparément.


J'ai essayé d'utiliser%% mais le même problème


J'ai essayé votre suggestion, j'ai eu une erreur: Échec de définir des informations sur les dépendances: Attendant l'objet d'une chaîne, d'unicode ou d'un objet tampon


Parce que je t'ai donné un tuple. Débarrassez-vous de Query_string = ... et utilisez simplement cursor.execute ("Insérer dans" + dépôt + "(Client, sis, entité_name_1, entité_name_2, flag_dep, processus, flag_dep_det) Valeurs ( % S,% S,% s,% s,% s,% s,% s); ", (" CO ", qo.db_src, qo.table_src, qo.table_des, qo.check_func, qo.table_des, aucun )))


J'ai fait une même erreur: Échec de définir des informations sur les dépendances: Attendant l'objet d'une chaîne, d'unicode ou d'un objet tampon


Alors je n'ai aucune idée. Vous n'avez pas donné suffisamment d'informations pour que nous déboguez cela au-delà "Voici une approche totalement ouverte à SQL-injection" avec une erreur désincarnée. Si l'erreur indique une partie particulière de la requête, vous ne l'avez pas montré.


Je donne la requête où j'ai le problème, de quelque façon que ce soit merci


Les bibliothèques SQL que j'ai utilisées vous donnent une indication dans la requête il y a un problème, pas seulement "cette requête, quelque part, est faux"


3 Réponses :


1
votes

Déposez le semi-points à la fin de la chaîne que vous créez / exécutant.

Cela ne devrait pas faire partie de l'instruction SQL, plutôt utilisée dans certains outils client pour indiquer la fin d'une instruction afin que le client puisse l'envoyer à la base de données à exécuter.


0 commentaires

0
votes

J'ai trouvé la solution au problème connection.commit ()


0 commentaires

0
votes

Vous pouvez utiliser la méthode code> format code> dans Python comme ci-dessous:

def execute_query(self, qo):
    query_string = "INSERT INTO {0} (client, sis, entity_name_1, entity_name_2, flag_dep,process, flag_dep_det) VALUES ('{1}', '{2}', '{3}', '{4}', '{5}', '{6}', {7})".format(dep_table, 'CO', qo.db_src, qo.table_src, qo.table_des, qo.check_func, qo.table_des, 'NULL')
    cursor.execute(query_string)


0 commentaires