Ya os conté que trabajo con la versión #Anaconda de Python, ya que facilita mucho el disponer de todas esas herramientas para trabajar con datos. Sin embargo, me ha extrañado un poco que no incluyan el paquete para trabajar con MySQL, ni siquiera en sus repositorios.
Así que, para trabajar con MySQL hay que instalar un paquete que me facilite la conexión con la base de datos. Ya vimos cómo instalar MySQLdb, pero aun habiendolo instalado, parece que no funciona:
Así que, en este post de un foro recomiendan usar PyMySQL como conector. Así que, me lo descargo, y lo instalo desde su código fuente:
Compruebo que funciona:
Clase para trabajar con PyMySQL
Para trabajar con PyMySQL, me he creado una clase que me facilita la vida y que puedo reutilizar en varios proyectos que tengo. El código es este, aunque también podeis tener el código en GitHub.
# coding: utf-8 __author__ = 'dtrillo' import sys; import pymysql; #mysql library (you will need to install this on the system) #MySQL Singleton Class with pymysql class MySQLConnector(object): # http://famousphil.com/blog/2012/01/mysql-singleton-classes-in-php-and-python/ _connection = None; _instance = None; def __init__(self, host="localhost", user="root", passwd="forever", database="", debug=False): # Versión 1.0.1 try: if MySQLConnector._instance == None: MySQLConnector._instance = self; self.dbhost = host self.dbuser = user self.dbpassword = passwd self.dbname = database MySQLConnector._instance.connect(debug); # Versión 1.0.1 except Exception, e: print "MySQL Error "+str(e); def instance(self): return MySQLConnector._instance; def get_connection(self): return MySQLConnector._connection; def connect(self, debug=False): try: MySQLConnector._connection = pymysql.connect(self.dbhost, self.dbuser, self.dbpassword, self.dbname); if debug: print "INFO: Database connection successfully established"; except Exception, e: print "ERROR: MySQL Connection Couldn't be created... Fatal Error! "+str(e); sys.exit(); def disconnect(self): try: MySQLConnector._connection.close(); except: pass;#connection not open #returns escaped data for insertion into mysql #def esc(self, esc): # return MySQLdb.escape_string(str(esc)); #query with no result returned def query(self, sql): cur = MySQLConnector._connection.cursor(); return cur.execute(sql); def tryquery(self, sql): try: cur = MySQLConnector._connection.cursor(); return cur.execute(sql); except: return False; #inserts and returns the inserted row id (last row id in PHP version) def insert(self, sql): cur = MySQLConnector._connection.cursor(); cur.execute(sql); return self._connection.insert_id(); def tryinsert(self, sql): try: cur = MySQLConnector._connection.cursor(); cur.execute(sql); return self._connection.insert_id(); except: return -1; #returns the first item of data def queryrow(self, sql): cur = MySQLConnector._connection.cursor(); cur.execute(sql); return cur.fetchone(); #returns a list of data (array) def queryrows(self, sql): cur = MySQLConnector._connection.cursor(); cur.execute(sql); return cur.fetchmany();
Esta clase no es mia, sino que gran parte la saqué de aqui, aunque posteriormente he modificado algunas partes que evitan que la información de la conexión estuviera en un archivo de configuración.
Ahora en un script
Y ahora, un pequeño script donde vemos cómo trabajar con PyMySQL:
Básicamente, iniciamos el objeto MySQLConnector informándole de los parámetros necesarios para la conexión, y a partir de ahí, ya tenemos conexión y … a trabajar con la base de datos! Sencillo, no?
Un saludo.