viernes, 30 de julio de 2010

Reporte en HTML de un modelo en MySQLWorkBench 5.2.25

Por lo regular utilizo MySQL Workbench Standard Edition para diseñar el esquema de mis bases de datos, sin lugar a dudas esta es una gran herramienta, pero ésta versión no tiene un reporteador para generar en HTML la documentación de los campos utilizados.

Me dí a la tarea de buscar como utilizar el lenguaje de scripts y genere el siguiente código que genera una tabla en HTML con los nombres de las tablas y las columnas, con sus descripciones.

Solo tienes que cambiar la siguiente línea para obtener la documentación de tu modelo

local schemata= grtV.getGlobal("/wb/doc/physicalModels/0/catalog/schemata/1/tables")

Para saber la ruta correcta puedes dar clic en Scripting, Scripting Shel y la ventana Working Scripting Shell pulsar en la pestaña Global para seleccionar tu propio esquema.

Para generar el documento en HTML guarda el código de abajo en un documento de texto con la extensión .lua y lo ejecutas desde Scripting, Run Workbench Script File

Espero les sea de utilidad.

Nota importante: Hay una versión más reciente de éste script aquí


local schemata= grtV.getGlobal("/wb/doc/physicalModels/0/catalog/schemata/1/tables")
local i
local j
print("<table border='1' style='width:100%'> \n" )
for i=1, grtV.getn(schemata) do
print("<tr> \n" )
print("<td colspan='5'> TABLE NAME: " .. schemata[i].name .. "</td> \n")
print("</tr> \n" )

print("<tr> \n" )
print("<td>COLUMN_NAME</td> \n")
print("<td>TYPE</td> \n")
print("<td>NULLABLE?</td> \n")
print("<td>AUTO_INCREMENT?</td> \n")
print("<td>COMMENTS</td> \n") print("</tr> \n" )

for j=1, grtV.getn(schemata[i].columns) do
print("<tr> \n" )
print ( " <td>" .. schemata[i].columns[j].name .. "</td> \n" )
print ( " <td>" .. schemata[i].columns[j].formattedType .. "</td> \n" )

if (schemata[i].columns[j].isNotNull == 1) then
print (" <td>" .. "NOT NULL" .. "</td> \n" )
else
print ( " <td>" .. "NULL" .. "</td> \n" )
end

if (schemata[i].columns[j].autoIncrement == 1) then
print (" <td>" .. "AUTO_INCREMENT" .. "</td> \n" )
else
print (" <td>" .. " - " .. "</td> \n" )
end

print ( " <td>" .. schemata[i].columns[j].comment .. "</td> \n" )
print("</tr> \n" ) end

end
print("</table> \n" )
print ( "\n" )

27 comentarios:

  1. Saludos: Me quito el sombrero, que soluciíon tan efectiva, estaba buscando precisamente la forma; de extraer la informacion de documentacion de la base de datos con WorkBench y no encontraba como.

    M U C H A S G R A C I A S

    ResponderEliminar
  2. la linea que dices que cambie por local schemata= grtV.getGlobal("/wb/doc/physicalModels/0/catalog/schemata/1/tables")
    eso en donde lo cambio????????????

    ResponderEliminar
  3. Hola, tengo un problema al ejecutar el script la salida exacta es esta:

    #######
    Executing script /home/pepe/Escritorio/dict.lua...


    TABLE NAME: api


    COLUMN_NAME
    TYPE
    NULLABLE?
    AUTO_INCREMENT?
    COMMENTS

    error executing script: /home/pepe/Escritorio/dict.lua:21: Invalid object member 'columns'
    Executing script /home/**/Escritorio/dict.lua...


    TABLE NAME: api


    COLUMN_NAME
    TYPE
    NULLABLE?
    AUTO_INCREMENT?
    COMMENTS

    error executing script: /home/**/Escritorio/dict.lua:21: Invalid object member 'columns'
    ########

    he cambiado la linea para mi esquema
    local schemata= grtV.getGlobal("/wb/doc/physicalModels/0/catalog/schemata/tables")

    y desde Workbench Scripting Shell veo que columns está definida como:
    colums = [{db.mysql.Column}(fa6....)]

    Mi version de mysql Workbench es la 5.2.31
    ¿Que hay mal?

    ResponderEliminar
  4. Hola me gusto el script, de hecho lo estoy ocupando para documentar unas bases de datos, hize algunas modificaciones para que incluya la descripcion de las tablas, espero poder agregar las vistas despues.

    Yo no tube que modificar nada, eso si el documento que vas a sacar tiene que ser el primero

    si quieren el codigo mandenme un correo a marcelino01@gmail.com, ya que el sitio no me daja publicarlo ><

    saludos.

    ResponderEliminar
  5. Que tal Abraham, me da gusto saber que te es util el Script.

    ResponderEliminar
  6. Dejame decirte que este código es excelente... muchisimas gracias.. en serio.

    Y con tu permiso me gustaria hacerle unas pequeñas modificaciones para tener una forma de obtener un diccionario de datos....

    ResponderEliminar
  7. Claro que si. La idea es compartir el conocimiento con todos.

    Puedes revisar estas entradas: http://tmsanchezdev.blogspot.com/2010/08/agregando-estilos-al-script-para.html o lo aportes que hizo Abraham para mostrar información de los procedimientos. http://tmsanchezdev.blogspot.com/2011/07/nueva-version-para-generar-reporte-en.html

    Saludos

    ResponderEliminar
  8. Muchisimas gracias.... estan muy buenos todos.. en cuanto tenga listos mis aportes te los paso... y si tienes razon es muy bueno compartir el conocimiento.. y en especial una manera facil de obtener ese tipo de datos... gracias todoas ya ti. :)

    ResponderEliminar
  9. Estimados a partir de este post generé un plugin para automatizar el proceso, una vez instalado la opción se encuentra presente en Plugins > Catalog > DBdoc: Write to File (para guardar en un archivo) y Plugins > Catalog > DBdoc: Copy to Clipboard (para copiar a portapapeles). http://dl.dropbox.com/u/38625994/db_doc_plugin.lua

    ResponderEliminar
  10. Muchas gracias por compartir con la comunidad el plugin. En cuanto tenga tiempo voy a crear una entrada en el blog.

    Saludos.

    tmsanchez

    ResponderEliminar
  11. Excelente viejo!!! gracias por el aporte.

    ResponderEliminar
  12. Muchas gracias! Permitame escribir en inglés:

    When I run the script WB immediately closes, with no error message. What am I possibly doing wrong? WB 5.2.17 Beta (from the Kubuntu repositories). You can reply in Spanish.
    Thanks in advance,
    Marcos

    ResponderEliminar
  13. It keep showing: "object '/wb/doc/physicalModels/0/catalog' not found"
    what should i do?

    You said to change that line, but it's the same in mine. I'm using mac os. don't know if change's anything.

    ResponderEliminar
  14. I got the same problem that Jose Luis.

    Invalid object member 'columns'

    How can i fix it?

    ResponderEliminar
  15. Dear friends please see changes that tmsanchez published in this blog entry: http://tmsanchezdev.blogspot.com/2011/07/nueva-version-para-generar-reporte-en.html

    Also you can save those lines into a script file and then import it into MySQLWorkbench as a pluging.

    Best regards.

    ResponderEliminar
  16. Gracias a tmsanchez por compartir y gracias a abraham por enriquecer lo compartido. Pero una gran felicitacion a Carlos Acuña que a falta de orientacion fue la unica solucion que encontre.

    ResponderEliminar
  17. Una pregunta donde se guarda el archivo html generado?

    ResponderEliminar
  18. I am not being able to run this I get the following error:

    Error: Time: 11:29:19 Message: Error executing plugin wb.tools.runScriptFile: An error occurred while executing the script report.lua

    Executing script
    Error in file: report.lua:1: 'do' expected near 'doprint'

    ResponderEliminar
  19. Executing script: report.lua...

    error executing script: report.lua:21: Invalid object member 'columns'

    ResponderEliminar
  20. excelente script, aunque habia encontrado otro que funcionaba mejor, solo lo hacia con unas cuantas tablas, este funciona con todas! realmente podria decir que este funciona mejor solo por eso jajaja
    Igual, ¿supongo que podria modificarlo mas a mi conveniencia si no es molestia?

    ResponderEliminar
  21. --[[
    Genial aportacion, le realize unos cambios para que funciones en mi equipo.
    Editado por jpakoery 12-11-2013
    utilizo Debian.
    Mysql 5.5
    ]]

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. No me dejo subir el codigo, si gustan pueden mandar un correo a pmora9@gmail.com y con mucho gusro lo comparto.

      Eliminar
  22. Saludos a todos, yo ya tengo me db hecha en mysql, alguien me podria decir como hacer el diccionario de mi db con MySQL Workbench

    ResponderEliminar
    Respuestas
    1. La última versión se encuentra aquí:
      http://tmsanchezdev.blogspot.mx/2015/03/html-report-from-mysqlworkbench-6x.html
      Saludos

      Eliminar