[caracas-pm] Pregunta referente a DBI

Andrés Gazsó agazso at ius.cc
Mon Jul 10 17:46:00 PDT 2006


Estimado Alejandro:

Ante todo me gustaría revisar contigo la estructura del programa.

Asumo que quieres:

0. Tener la interfaz con el usuario a través de una página en el
navegador;
1. Tener una base de datos SQL (te recomiento PostgreSQL o SQL Lite,
pero en ningún caso MYSQL porque no maneja trasacciones lo cual equivale
a que no puedes verificar lo que estás cargando a la base de datos a
nivel de la base de datos misma; y,
2. La lógice del programa en Perl

En cuanto a lo anterior, mis recomendaciones por punto y desde mi
humilde punto de vista:

0. para la interfaz del usuario, si es una sola página, puedes utilizar
el módulo HTML::Templates, con lo cual creas una página de HTML puro con
unas variables y la cargas desde tu programa de Perl. Por otro lado, lo
puedes combinar con CGI.

1. En cuanto a no tener las sentencias de SQL en el programa, salvo que
se trate de un asunto religioso o porque quieras cambiar las sentencias,
puedes usar "Tied Hashes" pero ello requiere destrezar de programador
nivel Master-Jedi, que en tu situación de Padawan dudo que tengas,
porque tiene que haber concordancia entre las variables que está
manejando DBI, tu setencia SQL -la cual deberás preparar- y para lo cual
deberás contar con las variables. En fin, si bien no veo ninguna
limitación, también es cierto que programarlo no será trivial. Los "Tied
Hashes" funcionan así: tienes un hash que está en un archivo externo con
su clave y valor (la clave es la variable y el valor es tu sentencia
SQL) y al cargar tu programa de Perl, el mismo "importa" el hash a la
hora de interpretar el programa. Ello te permitiría modificar la
sentencia en el Hash. En cuanto a MySQL, (te recuerdo que si quieres
seguir siendo pana nuestro, la fórmula es Debian-Apache-Postgres-Perl y
nada de piraterías raras de la rebelión) dicho manejador de base de
datos no maneja trasacciones, por lo que en principio, cada dato cargado
tendrá en la pŕactica una suerte de "auto-commit" sin poder regreasar si
la data no valida, no evalúa correctamente  o en defintiva es
inconsistente. La idea con programas de verdad, es que tú preparas la
data que vas a cargar en la base de datos, la evalúas con eval y si la
base de datos no reporta error con lo que pretendes cargar, le mandas
una instrucción de "Commit"; caso constrario, le envías "Rollback" e
informas al usuario que la data no está kosher.

2. La lógica del programa o de la "página" es perfectamente manejable
por perl y puedes tener tantas páginas como quieras, ya sea por vía de
HTML::Templates (con sus limitaciones) o por vía de CGI, donde si bien
es más "rudo" también es cierto que ofrece más posiblidades. Todo
depende del nivel de complejidad de tu programa.

Esta es mi humilde recomendación en base a los conocimientos que he
venido acumulando en el tema, pero a todo evento teníamos previsto
proponer CGI y HTML::Templates para el príximo Mongers.

Saludos,

Vader. 




On Mon, 2006-07-10 at 20:44 -0400, Alejandro Garrido Mota wrote:
> Buenas a todos, tengo una duda, estoy usando el módulo DBI junto con
> otros más para el desarrollo web de pequeñas aplicaciones para
> practicar, la mayoría de ellas prácticamente funcionan mediante
> formularios web dónde voy creando tablas he insertando datos a una base
> de datos mysql utilizando el módulo DBI, en fin todo me va muy bien pero
> el problema radica que cuando ejecuto cualquiera de los programas que
> hago el script tiene que crear las tablas por defecto(es decir la base
> para luego mediante otros formularios empezar a llenar las tablas) junto
> con las columnas y todo lo demás, eso lo hago desde el mismo Script
> (esto es lo que no quiero, no quiero mezclar Perl con sentencias SQL).
> Lo que yo quiero es llamar desde el script en Perl a un archivo (Un
> archivo que tiene todas las sentencias SQL) y que "decirle" a Perl que
> ejecute todas esas sentencias SQL del archivo. La verdad no se como
> hacer eso, no se si existe alguna función de DBI que me permita
> hacerlo(medio revisé en la doc y no encontré) :-S La verdad  no tengo ni
> idea, esa es la duda que quisiera que me respondan
> 
> Bueno cuando tengan un tiempito me dice. Hablamos  :-P
> 
> Saludos
> 



More information about the caracas-pm mailing list