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 :

AttributeError: 'NoneType' object has no attribute 'fetchrows' [Fait]


Sujet :

Python

  1. #1
    ms7
    ms7 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 114
    Points : 66
    Points
    66
    Par défaut AttributeError: 'NoneType' object has no attribute 'fetchrows'
    Salut,
    je suis en train de realiser un petite application Pyhon avec Tkinter qui est connecter a une base de donnees MySQL.

    Dans mon code j´ai cree une fonction qui selectionne les elements d´un table (ici table phone)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def setSelect () :
        global phoneList
        c = db.query("select id,name,phone from phones order by name")
        phoneList = c.fetchrows()
         select.delete(0,END)
        for id,name,phone in phoneList :
            select.insert (END, name)
    ...mais cela me renvoi l´erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    linux:~/Python/Tutorials # python sqlPhone.py
    Traceback (most recent call last):
      File "sqlPhone.py", line 85, in ?
        setSelect ()
      File "sqlPhone.py", line 79, in setSelect
        phoneList.fetchrows(c)
    AttributeError: 'NoneType' object has no attribute 'fetchrows'
    ....j´ai evidement consulter la FAQ Tkinter et reessayer comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def setSelect () :
        global phoneList
        c = db.query("select id,name,phone from phones order by name")
        #phoneList = c.fetchrows()
        phoneList = c
        phoneList.fetchrows()
        select.delete(0,END)
        for id,name,phone in phoneList :
            select.insert (END, name)
    ...mais cela me renvoi toujours la meme erreur.

    Pardonne mon inexperience en Python, c´est probablement une erreur toute bete...

    Merci de votre aide...

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    à priori la fonction db.query renvoit None => c = None => y'a rien dans c
    Donc il faut regarder du côté de db.query pour voir comment ca marche.

    Moi j'utilisais les curseurs pour faire des requêtes
    http://www.developpez.net/forums/sho...5&postcount=10

  3. #3
    ms7
    ms7 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 114
    Points : 66
    Points
    66
    Par défaut
    merci Guigui pour tes conseils....
    maintenant ca marche

    cela dit j´ai une autre fonction qui permet d´ajouter un enregistrement a ma table (def add Entry) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def whichSelected () :
        print "At %s" % (select.curselection())
        return int(select.curselection()[0])
     
    def dosql (cmd) :
        print cmd
        c = cur.execute(cmd)
        setSelect ()
     
    def addEntry () :#insert datas
        c = cur.execute("select max(id)+1 from phones")
        id = c.fetchdict()[0].values()[0]  # digs deep to get next id
        dosql("insert into phones values (%d,'%s','%s')" % (id,nameVar.get(), phoneVar.get()))
    ...
    afin de creer un nouvel id (autoincrement) je dois faire appelle egalement a la fonction whichSelected....
    lorsque je teste et essaye d´ajouter un nouvel enregistrement voila....ce ke j´ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
        return self.func(*args)
      File "sqlPhone.py", line 22, in addEntry
        id = c.fetchdict()[0].values()[0]  # digs deep to get next id
    AttributeError: 'long' object has no attribute 'fetchdict'
    apparrament mysql n´est pas trop les fetchdict et les fetchrows

    => FAQ: http://python.developpez.com/faq/?pa...eErrorNoneType

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

Discussions similaires

  1. [Python 3.X] AttributeError: 'NoneType' object has no attribute 'write'
    Par myth2104 dans le forum Général Python
    Réponses: 2
    Dernier message: 07/07/2015, 01h37
  2. Réponses: 3
    Dernier message: 04/03/2014, 22h41
  3. Réponses: 2
    Dernier message: 06/07/2012, 19h38
  4. AttributeError "nonetype" object has no attribute
    Par Invité dans le forum Général Python
    Réponses: 2
    Dernier message: 14/12/2010, 20h49
  5. Probleme : AttributeError: 'tuple' object has no attribute
    Par MrGecko dans le forum Général Python
    Réponses: 1
    Dernier message: 27/05/2007, 09h59

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