Archive for the 'Bases de datos' Category

[Video]: Instalar SQL Server en Linux

No soy mucho de SQL Server (soy más de Oracle) pero bueno, aquí os dejo un video de JGaitPro donde nos cuenta como instalar SQL Server en Linux.

Implementando un Sistema de templates con Bash y Sqlite

sqlite001

Puede que en algún proyecto tengamos que utilizar algún fichero de plantilla (que en definitiva no dejan de ser ficheros de texto plano con variables) donde tengamos que sustituir las variables del fichero de la plantilla por los valores recuperados desde algún origen de datos.
P.ej

imaginad que tenemos una plantilla «consultaLibros.xml» de la forma:


<?xml version="1.0">
<CONSULTA>
<TITULO> ${TITULO} </TITULO>
<AUTOR> ${AUTOR} </AUTOR>
</CONSULTA>

Y por otro lado tenemos un origen de datos tal que los valores de las variables a sustituir son p.ej:


TITULO="El amor en los tiempos del colera"
AUTOR="Gabriel garcia Marquez"

De manera que a la hora de reemplazar las variables en la plantilla queremos obtener un fichero de la forma:


<?xml version='1.0'>
<CONSULTA>
<TITULO> El amor en los tiempos del colera </TITULO>
<AUTOR> Gabriel garcia Marquez </AUTOR>
</CONSULTA>

Nota: Esto es un «simple» ejemplo en tu caso tendrás que extrapolarlo a tu caso particular. Pero la base es la misma, tener ficheros de plantilla con un determinado formato y quiero sustituir sus valores por las variables que corresponda en cada caso.

Para implementar este sistema de plantillas vamos a utilizar como base de datos sqlite y como sistema de generación para las plantillas, un script en bash.

SQLITE es una base de datos que guarda toda la información en un único fichero. No es un sistema ideal para manejar millones de registros, pero si que nos puede servir perfectamente para este proyecto de plantillas o como base de datos de configuración.

Para instalar sqlite3, en un sistema basado en debian, prueba con:

$ sudo apt-get install sqlite3

Después ya podriamos empezar a utilizarla desde la shell.

Usar sqlite desde linea de comandos de la shell es muy sencillo. En este enlace puedes encontrar un breve tutorial. Y en este otro enlace una chuleta de uso.

P.ej podemos crear una base de datos residente en un fichero llamado «test.db» si invocamos al interprete de sqlite3 con:

$ sqlite3 test.db

Ahora ya podriamos meter las sentencias DDL de creacion de nuestras tablas. P.ej yo voy a crear una tabla PARAMETROS con 3 campos: ID, NAME, VALUE y otra tabla TEMPLATES con campos NAME, VALUE.

CREATE TABLE PARAMETROS (ID text, NAME text, VALUE text);

CREATE TABLE TEMPLATES (NAME text, VALUE text);

Y con eso ya tendria las tablas creadas.

Ahora ya incluso podria empezar a añadir datos en ellas:

INSERT INTO PARAMETROS VALUES ('100','TITULO','el amor en los tiempos del colera');

INSERT INTO PARAMETROS VALUES ('100','AUTOR','Gabriel Garcia Marquez');

INSERT INTO PARAMETROS VALUES ('200','TITULO','el pendulo de Foucault');

INSERT INTO PARAMETROS VALUES ('200','AUTOR','Umberto eco');

Y realizar consultas sobre las tablas:

SELECT * FROM PARAMETROS;

sqlite02

Si no te sientes comodo usando la shell puedes incluso utilizar un cliente grafico para trabajar con las bases de datos creadas con sqlite como puede ser SQLite data browser (instalable desde el software center).

sqlite03

sqlite4

sqlite05

Una vez que queramos terminar la sesión con sqlite ejecutamos:

.quit

Y observamos que se habra creado un archivo «test.db» que contiene nuestras tablas y datos.

Cada vez que queramos volver a trabajar desde consola con ese archivo, ya sea para hacer selects, o nuevos inserts. Ejecutaremos: sqlite3 test.db o el nombre que le
hubieramos dado al archivo o base de datos.

Bien, procedamos tambien a crear datos para nuestra template de la forma:

sqlite3 test.db

insert into TEMPLATES VALUES ("ConsultaLibro","
${TITULO}
${AUTOR}
");

t1

Perfecto.

Tenemos nuestra base de datos creada con 2 tablas.

– una de las tablas llamada PARAMETROS nos proporcionara los parametros que queremos usar según una clave id. P.ej dame los parametros con id=100 o dame los parametros con id=200

– otra de las tablas llamada TEMPLATES nos proporciona la template o templates que queremos recuperar, para luego pasar los parametros que queramos reemplazar y obtener ya la template parseada con las variables ya sustituidas.

Para recuperar estos valores de variables y templates, y realizar las funciones del preprocesado vamos a utilizar un script de bash. Luego podriamos montar una libreria en bash u organizar el codigo como queramos.

Implementemos la primera funcion para recuperar los parametros, podria ser algo como:

#!/bin/bash
DB_SQLITE="test.db"
function recuperar_parametros()
{
id="$1"
LIST=`sqlite3 "$DB_SQLITE" "SELECT * FROM parametros WHERE id='$id';"`
for ROW in $LIST; do
#echo $ROW | awk -F"|" '{print $2}'
name=`echo $ROW | awk '{split($0,a,"|"); print a[2]}'`
value=`echo $ROW | awk '{split($0,a,"|"); print a[3]}'`
echo "$name -> $value"
eval "export $name=\"$value\""
done
}

esta función hace una select a la tabla parametros por el valor del id que le pasamos como parametro y luego recorre la lista de valores recuperados para extraer el nombre y el valor del parametro. Despues ya hace un export de esa variable.

La otra función para recuperar el template queda como:

function recuperar_template()
{
name="$1"
sqlite3 "$DB_SQLITE" "SELECT value FROM templates WHERE name='${name}';"
}

Y el código para recuperar los parametros, recuperar el template y sustituir los parametros en el template seria:

IFS=$'\n'
echo "-- Parametros --"
recuperar_parametros "100"
TEMPLATE=`recuperar_template "ConsultaLibro"`
eval "echo -e \"$TEMPLATE\"" > .xml
echo "-- Template --"
cat .xml

Todo junto:

t2

Que si lo ejecutamos:

c1

si en vez de recuperar para la plantillas los parametros de id=100 quisieramos los de id=200 todo el codigo seria igual pero cambiando la linea de recuperación de parametros, por la siguiente:

recuperar_parametros "200"

c2

Y con todo ésto ya hemos visto como crear una base de datos Sqlite, como acceder al contenido de sus tablas desde Bash e implementado un sistema sencillo de creación de plantillas.

Referencia | Usar ficheros de plantillas con Bash

RoboMongo: Herramienta de administración para MongoDB

robomongo

Si trabajas con la base de datos MongoDB, puede que ésta utilidad te sea de interes. Disponible para Windows, Linux y Mac te permite trabajar más comodamente desde una GUI y administrar la base de datos. Puedes descargarla desde el siguiente enlace. Escribi un articulo sobre MongoDB hace algún tiempo pero hay tambien muy buena documentación en el sitio principal.

Relacionado | Una introducción a MongoDB

Ejecutar PLSQL desde shell script y guardar los resultados en variables

oracle

En dbaspot encuentro un buen ejemplo de script de como ejecutar un procedimiento PLSQL desde bash y como almacenar los resultados de las consultas en variables. Éste seria un ejemplo (adaptado para usar mi base de datos Oracle XE):


#!/bin/bash

#OUTPUT=$(sqlplus -s '/ as sysdba' <<-EOF
OUTPUT=$(sqlplus -s system/manager@XE <<-EOF
set heading off feedback off serveroutput on trimout on pagesize 0

select instance_name from v\$instance;
select version from v\$instance;

declare
i number := 0;
begin
while i < 3 loop
dbms_output.put_line('Parametro_PLSQL_' || i);
i := i+1;
end loop;
end;
/
EOF
)

# Sin dejar espacios pq los espacios son los nuevos parametros

INSTANCE=$(echo $OUTPUT | awk '{ print $1 }')
VERSION=$(echo $OUTPUT | awk '{ print $2 }')
ARG1=$(echo $OUTPUT | awk '{ print $3 }')
ARG2=$(echo $OUTPUT | awk '{ print $4 }')
ARG3=$(echo $OUTPUT | awk '{ print $5 }')

echo "Database: $INSTANCE":wr
echo "Version: $VERSION"
echo "Arg1: $ARG1"
echo "Arg2: $ARG2"
echo "Arg3: $ARG3"

Aqui puedes adaptarlo para tus propios ejemplos. Lo más importante la cadena de conexión, yo al usar Oracle XE tengo (system/manager@XE), en tu base de datos pon tu cadena usuario/password@SID. Despues que tambien los parametros devueltos no tengan espacios, pues al asignarlos a variables, el espacio es utilizado como separador. En el script hay una parte donde se devuelve una columna directamente de una select y esta es asignada a una variable de la shell, y otra parte donde se escribe el parametro con el paquete dbms_output.

Seleccionar un registro aleatoriamente en Oracle

Digamos que quieres recuperar una columna de una tabla pero a partir de una fila recuperada aleatoriamente para tal vez hacer pruebas de tu código. Fácil, puedes ejecutar algo como lo siguiente:

SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

Visto en | Pete freitag

jCodeCollector: Guarda tus «snippets» y no pierdas nada!!

Si eres desarrollador seguro que tienes cientos de trozos de código, scripts, o sentencias SQL que utilizas habitualmente y que en el momento que mas lo necesitas, nunca encuentras. Eso se puede acabar si utilizas alguna herramienta como jCodeCollector, que con una interfaz bastante intuitiva te permite crear categorias y organizar tus snippets de una manera sencilla.

La aplicacion es Multiplataforma (Mac, Win, Linux) y requiere de java para su funcionamiento. Puedes descargarla desde el sitio oficial.

Relacionado | 10 aplicaciones «free» de Escritorio para guardar tus snippets

OPENLIBRA: La biblioteca libre online que estabas esperando

¿Buscas algun libro tecnico para aprender a programar en algun lenguaje?. ¿Te gustaria diseñar tu propio videojuego? O en cambio te interesa algun ensayo, revista o novela. Pues echale un vistazo a OpenLibra, podras encontrar muchos tutoriales, manuales y PDFs que circulan por la red, pero categorizados y con un facil acceso.

Enlace | OPENLIBRA (gracias Mikel!! por el dato)

Dbeaver 1.5.1

Hace algun tiempo hable de Dbeaver. Pues bien, La version 1.5.1 ya se encuentra disponible con los siguiente cambios:

  • Content assistant configuration added in Preferences
  • Metadata editor fixes (database/table creation)
  • Table data editor fix (problems with auto-generated keys in MS SQL)
  • Error messages and localization fixes
  • Performance optimization
  • Main menu was updated (SQL editor related menus were moved)
  • Minor UI fixes

Por cierto: ¿Cual es tu cliente SQL preferido?

Enlace | Dbeaver

PySQL: Un sqlplus mejor que sqlplus

Me gustan los clientes graficos SQL (Ejemplo: Dbeaver o Squirrel) pero no siempre podemos usarlos, y tenemos que usar un cliente de consola. En el caso de Oracle, el amo es «sqlplus», muchas veces «amado» u «odiado» por otros. Pero si usas Python, Oracle y tienes instalado cx_Oracle (ver entrada anterior) tu experiencia puede ser mas agradable si usas PySQL (como siempre, cuestion de gustos). PySQL es un interprete de comandos para Oracle que puede ser un reemplazo completo de SQLPlus.

Para instalarlo, descargate los fuentes, descomprimelos y al igual que la instalacion de otros modulos para python:

$ sudo python setup.py install

Despues ya podremos ejecutar:

$ pysql <user>/<pass>@<servicio> para conectar

Enlace | Pantallazos | Lxnet

Conectar a Oracle desde Python (incluye compilación de cx_Oracle)

La conexion a una base de datos Oracle desde python se simplifica mucho si utilizamos un modulo como cx_Oracle. En el siguiente tutorial veremos los pasos para instalarlo y un breve ejemplo de conexión. Nota: en la pagina de cx_Oracle ya hay versiones precompiladas para Windows y Red hat, de manera que si utilizamos esas plataformas podriamos instalar el modulo directamente, de todas formas en este tutorial se comentara el caso desde 0.

INSTALACION DE CX_ORACLE

Si estamos utilizando un servidor de Oracle (como en el post anterior) no es necesario la instalación de un cliente de Oracle, pues ya va incluido, En otro caso tenemos que crearnos una cuenta en Oracle y descargarnos el cliente de Oracle.

En mi caso y en este ejemplo probe descargando la version ORACLE 11 para Linux 32. Son varios ficheros, debes descargarte aquellos ficheros que contienen en su nombre: basic, sdk y sqlplus. Los pasos ahora son simples:

– Descomprime los ficheros: basic , sdk y sqlplus

copia la carpeta que se crea a /etc/oracle/instant_client_11_2

Dentro crea las siguientes ligaduras:

# ln -s libclntsh.so.11.1 libclntsh.so
# ln -s libclntsh.so.11.1 libclntsh.dylib

si no creas estos enlaces, luego al intentar compilar cx_Oracle dara un error: /usr/bin/ld: cannot find -lclntsh

Ahora tenemos que actualizar las referencias a la libreras compartidas. Creamos el fichero /etc/ld.so.conf.d/oracle.conf con la siguiente línea:

/opt/oracle/instantclient_11_2

Y actualizamos:

ldconfig

si usas oracle server XE en cambio basta con insertar esta linea en este fichero:

root@ubuntu:~# cat /etc/ld.so.conf
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib

Y ejecutar tambien ldconfig (nota, en vez de 10.2.0 usa la version que hayas instalado).

Ahora insertamos en el profile del usuario y tambien como root (a la hora de compilar) ejecutamos:

export ORACLE_HOME="/opt/oracle/instantclient_11_2"
export DYLD_LIBRARY_PATH="$ORACLE_HOME"
export SQLPATH="$ORACLE_HOME"
export PATH="$PATH:$ORACLE_HOME"

Ya nos queda menos. antes de compilar «cx_Oracle» instalamos dependencias necesarias:

sudo apt-get install python-dev python-setuptools build-essential

Para evitarnos tambien el: libaio.so.1: cannot open shared object file: No such file or directory a la hora de ejecutar cx_Oracle

instalamos tambien la siguiente dependencia:

apt-get install libaio-dev

y ahora si, ya podemos compilarlo (para ello nos descargamos y compilamos los fuentes con pip):

apt-get install python-pip
pip install cx_Oracle

si todo es correcto podemos probar a importarlo desde python para comprobar que funciona:

$ python
$ import cx_Oracle
$ exit()

No deberia dar ningun error.

jose@ubuntu:~$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> exit()

Probando la conexion a ORACLE

Escribimos por ejemplo el siguiente codigo:

jose@ubuntu:~$ cat ORACLE.py

#!/usr/bin/python
import cx_Oracle
conn_str='HR/HR@127.0.0.1:1521/XE'
db_conn = cx_Oracle.connect(conn_str)
cursor = db_conn.cursor()
cursor.execute('SELECT * FROM countries')
registros = cursor.fetchall()
for r in registros:
  print str(r)

Que basicamente se conecta a la base de datos Oracle XE con el usuario HR, password HR que tenemos instalada en Local (si quieres conectar a otra base de datos Oracle cambia la cadena de conexion como corresponda) y ejecuta un select de la tabla Countries.
 

Consultando el API de cx_Oracle podremos obtener mas información de como ejecutar otro tipo de operaciones como insert, updates o deletes. Para ello recomiendo consultar los enlaces siguientes:

Enlaces sobre cx_ORACLE

Conexion a Oracle desde Python
Documentación de cx_Oracle
Instalar cx_Oracle en Ubuntu y dos
Como conectarse a Oracle desde Python

Relacionado:

Instalar Oracle XE en Ubuntu





¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map

Archivos

May 2024
L M X J V S D
 12345
6789101112
13141516171819
20212223242526
2728293031  

Blog Stats

  • 31.400.870 hits