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 :

Tranfsert de csv à une base données


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut Tranfsert de csv à une base données
    Bonjour,

    je voudrais faire un transfert de données d'un fichier csv à une table, j'ai commencé tout simplement à lire le fichier csv ligne par ligne et faire une insertion en base, mais le fichier contient plus de 20000 lignes, l’exécution est très longue.

    voilà des bouts de code de que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    connection = cx_Oracle.connect(url % 'pass')
    cursor = connection.cursor()
    with open(name, 'rb') as f:
         reader = csv.reader(f)
        for row in reader:
             insertSQL= "INSERT INTO ..."
            cursor.execute(insertSQL)
     
    cursor.close()
    		connection.commit() 
            connection.close()
    il doit exister une meilleur façon de faire, n'est ce pas ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    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 744
    Par défaut
    Salut,

    Il faut passer par des "bulk inserts", i.e. plutôt que de faire un .execute par ligne faire un .executemany sur N lignes.
    Testez la valeur optimale de N: elle dépend du driver, du SGDB,... et est de l'ordre de quelques milliers de lignes.
    Je ne pratique pas cx_oracle mais avec les mots clés "cx_oracle bulk insert",
    je suis tombé sur l'article qui indique comment faire.
    Bon courage,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Merci pour ta réponse. j'étais entrain de regarder un exemple similaire mais avec pysqlplus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. entrée d'une base données dans Openerp CSV+ activation d'emailing
    Par MBL242 dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 11/07/2013, 16h03
  2. comment cree une base donnée dans un site web ?
    Par cameleon2006 dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2007, 23h36
  3. Comment remplir un dbcombo à l'aide d'une base donnée ?
    Par eclectik dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/09/2006, 15h50
  4. [Conception] probleme chargement d'une base donnée à un tableau
    Par free01 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/06/2006, 15h29
  5. Tirage aléatoire dans une base donnée
    Par leloup84 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/01/2006, 16h13

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