Anaconda y MySQL

Posted by in MariaDB, MySQL, Python

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.

Anaconda y MySQL

Anaconda y MySQL

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:

Problemas con MySQL

Problemas con MySQL

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:

Instalando PyMySQL

Instalando PyMySQL

Compruebo que funciona:

Probando PyMySQL con Anaconda

Probando PyMySQL con Anaconda

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:

Anaconda y MySQL

Anaconda y MySQL

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.

Google+ Comments - Comentarios Google+