Entradas con la etiqueta “mysql”

Filtrar por fechas recientes con MySQL sobre Codeigniter

12 de agosto, 2011 - por | | Desarrollo

Nos pierde lo que acaba de suceder. Vivimos más intensamente lo que es reciente.

Hace poco he tenido que desarrollar el clásico grupo de filtros en forma de checkboxes, combos y radio buttons que se van aplicando con cada click que hace el usuario sobre un listado inicial de todos los elementos posibles.

Uno de los filtros tiene el siguiente aspecto:

La forma más fácil de desarrollar este filtro la encontré utilizando la función MySQL DATE_SUB(). Esta función tiene la siguiente sintaxis:


DATE_SUB(date,INTERVAL expr type)

donde date es una fecha cualquiera válida, y INTERVAL el número que quieres sustraer.

Lo que hice fue lo siguiente. A cada una de las opciones del filtro le asigno un valor numérico (31, 7 y 2 respectivamente). Considero date como el día de hoy, es decir, el momento en el que el usuario está aplicando el filtro. Le paso ambos argumentos a la función de MySQL, en la forma en el que Active Record de Codeigniter permite hacer este tipo de cosas:


$where = "upload_ts > DATE_SUB( NOW( ) , INTERVAL " . $days . " DAY)";
$this->db->where($where, null, false);

Utilizar InnoDB en Django

8 de agosto, 2011 - por | | Desarrollo, Tips

Si estás empezando a trabajar con Django y vas a utilizar MySQL, te conviene pararte un momento a mirar si estás utilizando el tipo de almacenamiento que realmente quieres.

Al generar los esquemas, Django no especifica ningún tipo de almacenamiento; sencillamente los genera con el que está establecido en tu servidor de MySQL. Así que si aún no has generado ningún esquema, revisa tu configuración de MySQL. Todas las versiones previas a la 5.5 hacían de MyISAM el almacenamiento por defecto.

La configuración del tipo de almacenamiento la puedes hacer directamente en MySQL, o especificarla en los settings de tu conexión a la base de datos en Django utilizando la opción “init_command”. Por ejemplo, del siguiente modo para establecer InnoDB como el tipo almacenamiento por defecto.


'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}

Si ya cuentas con algunas tablas, y te encuentras con que están con un tipo de almacenamiento distinto al que tu pensabas, te va a tocar modificar las tablas en la forma habitual:


ALTER TABLE tablename ENGINE=INNODB;

Instalar MySQLdb-Python en CentOS para utilizar sobre Django

6 de agosto, 2011 - por | | Sistemas, Tips

Si desarrollas sobre Django y lo haces tirando de una base de datos sobre MySQL, conectar Python a ésta en un entorno CentOS puede ser más difícil de lo que uno imagina. El paquete que CentOS instala por defecto para el driver de MySQL (“MySQL-python”) no cumple con los requisitos de Django, por antiguo. Así que si intentas hacer la instalación habitual:


yum install MySQL-python

te encontrarás con que cuando vas a levantar tu instancia de Django, ésta dice que no puede conectar a MySQL.

La solución más efectiva es tirar de “easy_install”:


easy_install mysql-python

Como lo que vas a ejecutar es una compilación de las fuentes del driver, tienes que tener instalados “gcc” y “python-devel”. De lo contrario, verás que aparecen errores de compilación. Para instalar éstos:


yum install gcc


yum install python-devel