IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

import csv dans oracle


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut import csv dans oracle
    bonjour,

    J'ai écrit un script qui parcours un csv pour l'ajouter à une table oracle. Mais j'ai un problème avec les champs car ils sont importés et ajouter à la table aussi comme simple ligne..?

    merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    # -*- coding: utf-8 -*- 
    import cx_Oracle
     
    import csv
    con =cx_Oracle.connect('')
     
    cur=con.cursor()
     
     
     
    create_table = """
    CREATE TABLE table1 (
    ID VARCHAR2(50) NOT NULL,
    code VARCHAR2(50) NOT NULL
    )"""
     
    cur.execute(create_table)
     
     
     
    lines=[]
    output=r".csv"
    with open (output,"r") as csvfile:
        reader=csv.reader(csvfile,delimiter=';')
        for row in reader:
            try:
                lines.append((row))
            except AttributeError:
                pass
    cur.prepare("insert into table1(id,code) values (:1,:2)")
    cur.executemany(None,lines)
     
    con.commit()

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ok, j'ai résolu en partie mon problème avec DictReader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reader=csv.DictReader(csvfile,delimiter=';')
    et en ajoutant le nom des champs présent sur mon csv sur la mise à jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lines.append((row['id'],row['code']))
    par contre j'ai une dizaine de champs; la structure de mon csv et de la table oracle est identique mais parfois les champs du csv ne sont pas dans le bon ordre.. existe il un moyen de faire correspondre automatiquement les champs du csv avec la table oracle???

    merci d'avance

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Les dictionnaires Python sont performants, mais ne conservent pas l'ordre d'introduction.

    Par contre, csv.DictReader le permet de façon détournée: en utilisant l'option "fieldnames=[..liste des noms de champs..]". Chaque ligne est un dictionnaire dont les clés sont les noms de champs. On peut donc retrouver l'ordre initial des données du csv en appelant ces données par l'intermédiaire des clés.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par bernards111 Voir le message
    par contre j'ai une dizaine de champs; la structure de mon csv et de la table oracle est identique mais parfois les champs du csv ne sont pas dans le bon ordre.. existe il un moyen de faire correspondre automatiquement les champs du csv avec la table oracle???
    Si le CSV range CODE avant ID, çà devrait fonctionner en écrivant le .prepare:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.prepare("insert into table1(id,code) values (:2,:1)")
    Avec le Dictreader, on pourra utiliser les clés du dictionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.prepare("insert into table1(id,code) values (:id,:code)")
    L'idée étant de paramétrer le SQL plutôt qu'écrire du code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ok, merci pour l'aide

    sinon est ce la bonne manière de l'écrire ou y a t il une manière plus propre et plus simple??? si vous avez des liens ou des avis je vous en remercie d'avance..

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par bernards111 Voir le message
    sinon est ce la bonne manière de l'écrire ou y a t il une manière plus propre et plus simple??? si vous avez des liens ou des avis je vous en remercie d'avance..
    Vous avez des outils qui font déjà çà de façon très efficace (voir ).
    Côté Python, vous pourriez réduire le nombre de lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cur.prepare("insert into table1(id,code) values (:1,:2)")  # mettre le bon mapping.
    with open (output,"r") as csvfile:
        reader=csv.reader(csvfile,delimiter=';')
        next(reader) # pour eventuellement sauter les en tetes.
        cur.executemany(None, reader)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ok , merci

Discussions similaires

  1. IMPORT CSV DANS ORACLE
    Par flokent7 dans le forum Import/Export
    Réponses: 2
    Dernier message: 13/07/2012, 08h44
  2. Import Csv dans un classeur existant Excel 97
    Par ceryal28 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/09/2007, 23h06
  3. Importer excel dans Oracle?
    Par wormseric dans le forum Oracle
    Réponses: 7
    Dernier message: 02/05/2007, 15h16
  4. Import CSV dans Mysql
    Par wylls dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/01/2007, 13h47
  5. Importer CSV dans MySQL
    Par The_freeman dans le forum Administration
    Réponses: 6
    Dernier message: 14/02/2006, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo