J'essaye de construire une classe en utilisant Python afin de gérer toutes les interactions avec les bases de données MySQL. J'ai installé le module MySQLdb et testé la connexion aux bases de données en utilisant un simple code. Quand je lance le code suivant:La classe Python pour prendre soin de la connexion MySQL continue de lancer une erreur
import MySQLdb
db = MySQLdb.connect (host="localhost", user="root" , passwd="xxxxxxx" , db= "some_db")
cursor = db.cursor()
s = cursor.execute ("SELECT * FROM some_table")
#Retrive a record to test it all went well...
t = cursor.fetchall()
for x in t:
print x
db.commit()
db.close()
Le code ci-dessus a bien fonctionné, il relié à la base de données « some_db » récupéré le seul enregistrement de la table « some_table ».
Toutefois, lorsque j'exécute le code répertorié ci-dessous, qui consiste en une section d'une classe utilisant la même logique, une erreur est générée. L'idée derrière la classe est d'ouvrir n'importe quelle base de données et autant de connexions que l'on souhaite ouvrir, effectuer des requêtes, etc. S'il vous plaît gardez à l'esprit que ce qui suit est juste une section de classe, plus de fonctions et quoi-avez-vous-être ajouté.
Le code est le suivant:
import MySQLdb
class d_con (object):
def __init__ (self, host, user , passwd , db):
self.host = host
self.user = user
self.passwd = passwd
self.db = db
self.d_b = MySQLdb.connect(host = self.host , user = self.user , passwd = self.passwd , db = self.db)
#Test the connection...
self.cur = self.d_b.cursor()
self.disp = self.cur.execute ("SELECT VERSION()")
print self.disp
def close_connection(self):
print "...Initializing connection closure..."
self.d_b.close()
#More function will be added , I am just testing the constructor.
if __name__ == "__main__ " :
a = d_con()
else:
print (" d_con class is imported , please instantiate an object in the fashion a = datacon.d_con() . ")
Quand j'importer le fichier contenant le code ci-dessus, il exécute et imprime la déclaration demandant à instancier la classe. Après avoir instancier la classe
a=datacon.d_con("localhost" , "root" , "xxxxxxx" , "some_db")
cette erreur se fait jeter:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "datacon.py", line 8, in __init__
self.d_b = MySQLdb.connect(self.host , self.user , self.passwd , self.db)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/MySQLdb/connections.py", line 193, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1049, "Unknown database 'some_table'")
Soyez assurés que j'ai, à plusieurs reprises, vérifié que les paramètres du MySQLdb.connect() sont corrects. De plus, j'ai même câblé les paramètres dans le constructeur pour m'assurer qu'il n'y a pas de fautes de frappe lors de l'instanciation de la classe. À chaque fois, j'ai la même erreur.
Depuis que je suis nouveau à Python, je ne suis pas sûr si le fichier de classe a du mal à importer le module MySQLdb ou s'il y a un problème de portée variable. Le module MySQLdb a été importé avec succès lorsque j'ai exécuté le code au début de cette conversation en utilisant la même base de données et les mêmes informations d'identification MySQL! Pourriez-vous m'aider? Merci d'avance.
Ps: Je courais tout cela sur Mac Os 10,12
'a = datacon.d_con (" localhoast "' - est-ce juste une faute de frappe ici ou est-ce aussi dans votre fichier? – asongtoruin
voulez-vous dire 'localhost' avec' localhoast'? –
Merci d'avoir souligné que Michel Toouw et asongtorium, cette faute de frappe est juste sur cette même page, sur le fichier réel et quand je cours, j'ai toujours la même erreur jeté même avec l'orthographe correcte de locahost et le reste des informations d'identification .. Je l'ai rectifié! – Tequillo