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 :

python+connexion base de donnée+cx_Oracle


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Par défaut python+connexion base de donnée+cx_Oracle
    Bonjour tout le monde,

    je débute avec python. je dois effectuer une connexion a la BD oracle et exécuter une certaine requête. A partir du résultat de cette requête, je dois connaitre le datatype des données récupérées. Pour cela j'ai utilisé ce bout de code.
    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
    35
    import cx_Oracle
    import dataextract as tde
    import os
     
    #Connexion à la BD
    con = cx_Oracle.connect('comping/comping@192.168.1.110/comping')
    print 'ok'
     
    #Creation de 2 list pour la recup des données
    fieldnameslist = []
    fieldnameslist1 = []
     
    #les requetes
    sql="select *  from c_invoice inv, c_bpartner par where inv.c_bpartner_id=par.c_bpartner_id "
    sql1="select *  from c_invoiceline inv, m_product pro where inv.m_product_id=pro.m_product_id "
     
    #Exécuter les requetes
    curs=con.cursor()
    curs1=con.cursor()
    curs.execute(sql)
    curs1.execute(sql1)
     
    print 'ok pour l execution'
     
    #Essayer de deviner le Type de données a partir de la première ligne
    for row in curs:
            itemz = len(row.keys())/2
            #Normalement on doit avoir une petite idée sur le type des données
    for k in row.keys():
                fieldnameslist.append(str(k) + '|' + str(type(row[k])).replace("<type '","").replace("'>","").replace("<class '","").replace('NoneType','str').replace('uuid.UUID','str') )
                break
     
     
     
    con.close()
    sauf que, quand j'exécute mon code, python ne reconnait pas row.keys() et lève une exception. le message d'erreur est
    Traceback (most recent call last):
    File "C:\Python27\Lib\SITE-P~1\PYTHON~2\pywin\framework\scriptutils.py", line 326, in RunScript
    exec codeObject in __main__.__dict__
    File "C:\Users\BMC\Desktop\extract\test.py", line 27, in <module>
    itemz = len(row.keys())/2
    AttributeError: 'tuple' object has no attribute 'keys'
    pouvez vous m'aider s'il vous plait !!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Ton message d'erreur est tout à fait normal. Suivant les spécification DB API 2.0, ce que renvoie
    l'itération sur un curseur est un tuple et non un dict.

    Si tu veux connaître quels sont les noms des champs renvoyés et leur type, utilise l'attribut description
    de ton curseur. Dans le cas de cx_Oracle, ce que tu obtiendra est expliqué http://cx-oracle.sourceforge.net/html/cursor.html

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Par défaut
    Bonjour chticricri,

    Merci d'avoir répondu aussi vite. En fait j'ai suivi ce tuto
    http://ryrobes.com/python/sql-server...hon-tableau-8/

    la seule difference est que ma base est oracle alors que lui il se connecte à SQL server.
    Est ce que tu as une proposition pour que je le fasse pratiquement de la même maniere que lui sans passer tout d'abord par curs.description

    Merci d'avance

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Désolé,

    Je suis au boulot et le proxy ne me laisse pas accéder au site que tu mentionne.
    En tout état de cause, il fait plus que certainement appel à une fonction qui transforme
    les tuples en dict, via cursor.description. Et donc, quel que soit le sgbd, il faut y passer.

Discussions similaires

  1. Connexion Base de Données
    Par Ordonnateur dans le forum Oracle
    Réponses: 2
    Dernier message: 02/11/2005, 10h24
  2. Réponses: 5
    Dernier message: 07/04/2005, 14h12
  3. [Tomcat][Oracle] connexion base de donnes debutant....
    Par yogz dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/07/2004, 13h32
  4. [XMLRAD] Connexion Base de données Informix
    Par clisson dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/01/2003, 13h46
  5. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22

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