Pasar a minúsculas todos los nombres de las tablas de una base de datos con MySQL Workbench

Pasar a minúsculas todos los nombres de las tablas de una base de datos con MySQL Workbench

Recientemente me ha surgido la necesidad de renombrar todas las tablas de una base de datos, resulta que XAMPP de Windows me creó las tablas con los nombres todo en minúsculas pese a yo haberlas creado con estilo “Camel Case” por lo que al subirlas al servidor Linux no coincidían los nombres de las tablas.

Parece ser XAMPP lleva activada la variable “lower_case_table_names” en Windows ya que es un sistema operativo que no distingue mayúsculas de minúsculas al contrario que Linux, así que al subir la base de datos a un servidor Linux había una incongruencia entre el código de la aplicación y la base de datos, por lo que me vi obligado a cambiarle el nombre a las tablas directamente en MySQL Workbench para no tener problemas en el futuro.

No pasaría nada si fuesen 3 o 4 tablas, pero es una aplicación bastante grande que tiene alrededor de 100 tablas, muchas de ellas con nombres bastante largos y no iba a ponerme a cambiar el nombre a 100 tablas manualmente, esa era la última opción a contemplar, tenía que haber otra forma.

Tras darle varias vueltas buscando en internet y demás, vi un montón opciones que no me terminaban de convencer, yo buscaba algo como un script en Python, Powershell o incluso en batch con el que modificar los nombres directamente sobre el fichero SQL exportado de MySQL Workbench para luego importarlo de nuevo o algo parecido pero no encontré nada, así que me dispuse a ver las opciones que tenía disponibles el propio MySQL Workbench en su menú y me topé con una que decía “Scripting”, ¿por qué no habría mirado aquí antes?

La primera opción (“Scripting shell”) ya me llamó la atención, si tiene una consola interactiva usada para scripting esto tiene que servir, y lo mejor vino tras abrirla que pude ver una linda pantallita negra en la que se podía leer “Python Shell initialized” : )

Esta imagen está capturada en un Mac pero todo este proceso se realizó por primera vez en un equipo Windows.

Ya tenía una shell interactiva que ejecutaba órdenes de Python, lo mejor vino cuándo vi que tenía la opción de ejecutar scripts enteros y no tener que hacerlo línea por línea, así que me dispuse a ello.

Al darle a crear nuevo script Python automáticamente se abrió un mini editor dentro de la propia ventana en el que se podía observar la importación por defecto de una librería llamada “grt”, ¿Qué será esa librería?

The GRT, or Generic RunTime, is the internal system used by Workbench to hold model document data. It is also the mechanism by which Workbench can interact with Modules and Plugins. Workbench model data, such as diagrams, schemata, and tables, is stored in a hierarchy of objects that can be accessed by any plugin GRT and Workbench Data Organization

Lo que viene a decir que:

GRT o GenericRuntime es el sistema utilizado por Workbench internamente para mantener los datos del documento. También el mecanismo mediante el cuál Workbench puede interactuar con sus módulos y plugins. Los datos de modelo de Workbench, así como los diagramas, el esquema de la base de datos y las tablas se almacenan como una jerarquía de objetos de forma que puedan ser accesibles por cualquier plugin

Vamos, en resumen el GRT contiene todo lo relacionado con la base de datos creada en MySQL Workbench y se encarga de gestionarlo y proporcionar acceso al mismo. Ya tenemos la posibilidad de crear un script en Python con acceso a nuestra base de datos directamente en MySQL Workbench sin necesidad de herramientas de terceros ni cosas raras, ¿Qué más se puede pedir? Ya sólo queda ensuciarse un poco las manos investigando como acceder a los nombres de las tablas de la base de datos para poder modificarlas y crear el script.

En la propia documentación se puede ver cómo acceder a las tablas y todo lo demás nos lo proporciona la magia de Python, este fue el script resultante:

# -*- coding: utf-8 -*-
# MySQL Workbench Python script
# <description>
# Written in MySQL Workbench 6.3.4
 
import grt
#import mforms
 
  tablesList = grt.root.wb.doc.physicalModels[0].catalog.schemata[0].tables
  for table in tablesList:
  table.name = table.name.lower()
  print(table.name)

Si no has usado nunca Python y vas a copiar este script has de saber que en Python la indentación es importantísima, si se indenta mal el código no funcionará. Lo que hace básicamente es recoger la lista de tablas de la base de datos en una variable y mediante un bucle “for” se accede a cada una de las tablas, se recoge su nombre, se le aplica el método “lower()” que lo que hace es pasar todos los caracteres a minúsculas y se vuelve a aplicar el nuevo nombre a la tabla, el “print” del final simplemente lo puse para verificar que lo hace correctamente.

Con un poco más de trabajo se puede implementar la opción contraria, pasar de minúsculas a estilo “Camel Case” o incluso todo mayúsculas, si te animas a adaptarlo agradecería que lo compartieses con nosotros.

Y así es como en 4 líneas que podían ser 2 se renombran más de 100 tablas de una base de datos, algo que de forma manual puede llevar bastante tiempo se puede hacer en menos de 1 minuto, un poco más si incluimos la parte de investigación, pero como ya está hecha ; )

Por eso quiero compartirlo con vosotros, para que podáis obviar la parte de investigar cómo hacerlo y simplemente hacerlo, ahorrándoos así esa parte de tiempo extra.

Relacionado:

By | 2017-09-17T22:51:39+00:00 septiembre 11th, 2016|Administrador de sistemas|0 Comments

About the Author:

Desarrollador de software de profesión, apasionado de la informática y todo lo relacionado con la tecnología

Leave A Comment