Problème de connexion avec ma base mysql
Le
DGBR
Je suis entrain d'essayer python avec mysql
Vraiment pas facile de trouver de la doc sur le sujet..
Mais bon je tombe sur un problème très basic
Voici mon code
# -*- coding: Latin-1 -*-
from Tkinter import *
import MySQLdb, sys
class Glob:
""" Espace de noms pour les variables et fonction <pseudo-
globales>"""
dbName = "ludoreve" # nom de la base
user = "dbrancia" # utilisateur
passwd = "xxxxxxx" # mot de pass
host = "192.168.1.33" # adresse
# structure de la base de données
dicoT = {"jeu":[('id_jeu' , "k", "clé primaire"),
('nom' , 25 , "Nom"),
('reference', 25 , "Réference"),
('fabricant', 25 , "Fabricant"),
('categorie', 25 , "Catégorie"),
('commentaire', "b" , "Commentaire"),
('infos_fabricant', "t", "Infos Fabricant"),
('inventaire', "b", "Inventaire"),
('date_achat', "d", "Date Achat"),
('prix', "i", "Prix"),
('id_ludo', "i", "Numero ludo"),
('Nbrepiece', "i", "Nombre de pièces"),
('Fournisseur', 200, "Fournisseur")]}
class GestionBD:
"""Mise en place et intefacage d'une base de donnes MySql"""
def __init__(self, dbName, user, passwd, host, port =3306):
"Etablissement de la connection"
try:
self.baseDonn = MySQLdb.connect(db = dbName,
user = user,
passwd = passwd,
host = host,
port = port)
except Exception, err:
print 'La connection avec la base de données a échoué :
Erreur détectée :%s' % err
self.echec = 1
else:
self.cursor = self.baseDonn.cursor()
self.echec = 0
def executerReq(self, req):
try:
self.cursor.execute(req)
except Exception, err:
print 'Requet SQL incorrecte :%s Erreur détectée :
%s' % (req,err)
return 0
else:
return 1
def resultatReq(self):
return self.cursor.fetchall()
class MenuBar(Frame):
"""Barre de menus, déroulante"""
def __init__(self, boss =None ):
Frame.__init__(self, borderwidth = 2)
#### Menu <Fichier> ####
fileMenu = Menubutton(self, text ='Fichier')
fileMenu.pack(side =LEFT)
# Partie "déroulante" :
me1 = Menu(fileMenu)
me1.add_command(label ='Connecter', underline =0, command =
boss.connecter)
me1.add_command(label ='Terminer', underline =0, command =
boss.quit)
# Intergration du menu :
fileMenu.configure( menu = me1)
class Application(Frame):
"""Application principale"""
def __init__(self, boss =None):
Frame.__init__(self)
self.master.title('Fenêtre avec menus')
mBar = MenuBar(self)
mBar.pack()
self.can = Canvas(self, bg='light grey', height=190,
width=250, borderwidth=2)
self.can.pack()
self.pack()
def connecter(self):
## self.can.delete(ALL)
bd = GestionBD(Glob.dbName, Glob.user,Glob.passwd, Glob.host)
if bd.echec():
print "Echec sur la base de donnee"
if __name__ == '__main__':
app = Application()
app.mainloop()
et le message reçut lors de la selection connecter
python main.py
La connection avec la base de données a échoué :
Erreur détectée :
(2003, "Can't connect to MySQL server on '192.168.1.33' (111)")
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "main.py", line 90, in connecter
if bd.echec():
TypeError: 'int' object is not callable
Vraiment pas facile de trouver de la doc sur le sujet..
Mais bon je tombe sur un problème très basic
Voici mon code
# -*- coding: Latin-1 -*-
from Tkinter import *
import MySQLdb, sys
class Glob:
""" Espace de noms pour les variables et fonction <pseudo-
globales>"""
dbName = "ludoreve" # nom de la base
user = "dbrancia" # utilisateur
passwd = "xxxxxxx" # mot de pass
host = "192.168.1.33" # adresse
# structure de la base de données
dicoT = {"jeu":[('id_jeu' , "k", "clé primaire"),
('nom' , 25 , "Nom"),
('reference', 25 , "Réference"),
('fabricant', 25 , "Fabricant"),
('categorie', 25 , "Catégorie"),
('commentaire', "b" , "Commentaire"),
('infos_fabricant', "t", "Infos Fabricant"),
('inventaire', "b", "Inventaire"),
('date_achat', "d", "Date Achat"),
('prix', "i", "Prix"),
('id_ludo', "i", "Numero ludo"),
('Nbrepiece', "i", "Nombre de pièces"),
('Fournisseur', 200, "Fournisseur")]}
class GestionBD:
"""Mise en place et intefacage d'une base de donnes MySql"""
def __init__(self, dbName, user, passwd, host, port =3306):
"Etablissement de la connection"
try:
self.baseDonn = MySQLdb.connect(db = dbName,
user = user,
passwd = passwd,
host = host,
port = port)
except Exception, err:
print 'La connection avec la base de données a échoué :
Erreur détectée :%s' % err
self.echec = 1
else:
self.cursor = self.baseDonn.cursor()
self.echec = 0
def executerReq(self, req):
try:
self.cursor.execute(req)
except Exception, err:
print 'Requet SQL incorrecte :%s Erreur détectée :
%s' % (req,err)
return 0
else:
return 1
def resultatReq(self):
return self.cursor.fetchall()
class MenuBar(Frame):
"""Barre de menus, déroulante"""
def __init__(self, boss =None ):
Frame.__init__(self, borderwidth = 2)
#### Menu <Fichier> ####
fileMenu = Menubutton(self, text ='Fichier')
fileMenu.pack(side =LEFT)
# Partie "déroulante" :
me1 = Menu(fileMenu)
me1.add_command(label ='Connecter', underline =0, command =
boss.connecter)
me1.add_command(label ='Terminer', underline =0, command =
boss.quit)
# Intergration du menu :
fileMenu.configure( menu = me1)
class Application(Frame):
"""Application principale"""
def __init__(self, boss =None):
Frame.__init__(self)
self.master.title('Fenêtre avec menus')
mBar = MenuBar(self)
mBar.pack()
self.can = Canvas(self, bg='light grey', height=190,
width=250, borderwidth=2)
self.can.pack()
self.pack()
def connecter(self):
## self.can.delete(ALL)
bd = GestionBD(Glob.dbName, Glob.user,Glob.passwd, Glob.host)
if bd.echec():
print "Echec sur la base de donnee"
if __name__ == '__main__':
app = Application()
app.mainloop()
et le message reçut lors de la selection connecter
python main.py
La connection avec la base de données a échoué :
Erreur détectée :
(2003, "Can't connect to MySQL server on '192.168.1.33' (111)")
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "main.py", line 90, in connecter
if bd.echec():
TypeError: 'int' object is not callable

Poser une question


[...]
[...]
[...]
[...]
Sûrement des parenthèses en trop.
-- Alain.
Pourtant le message est clair : echec est un int. En tout cas, c'est
ce que tu lui assigne aux lignes 42 et 45. Du coup, echec n'est ni une
fonction, ni un functor, et ne peut pas être appelée (is not callable).
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org