Cómo ordenar tuplas no por clave sino por el valor de la clave

Vamos a construir una lista de tuplas con la forma (valor,clave) para luego ordenarlo usando la cláusula sorted.

dic = {'llave1':20, 'llave3':3, 'llave2':233}
ordenar = sorted(dic.items())
 
for x,y in sorted(dic.items()):
   print(x,y)

Lo anterior nos mostrará el resultado ordenado por clave, es decir; llave1, 2 y 3 respectivamente:

Pero si lo que queremos es ordenar por el valor entonces debemos organizar nuestro código así:

dic = {'llave1':20, 'llave3':3, 'llave2':233}
lista = list()
 
for x,y in dic.items():
   lista.append((y,x))
 
lista = sorted(lista, reverse=False)
 
for x,y in lista:
   print(x,y)

Y obtendremos un resultado como este:

En caso de querer ordenar de mayor a menor solo bastaría con cambiar reverse=False por reverse=True

Separando palabras

En python contamos con la cláusula len que nos permite medir la longitud de un objeto (string, tuplas, listas, rangos…).

En este breve ejercicio vamos a tomar una palabra y la vamos a listar letra a letra, primero usando el bucle while y luego haciendo uso de for … in:

palabra = 'Linux'
index = 0
 
while index < len(palabra):
    letra = palabra[index]
    print(letra)
    index = index + 1

Lo que nos dará una salida similar a esta:

Ahora hagamos lo mismo usando el bucle for … in

palabra = 'Linux'
 
for letra in palabra:
    print(letra)

Y revisemos la salida:

Obtenemos el mismo resultado, solo que usando menos líneas de código.

Siempre que el resultado sea el mismo y lo podamos hacer de diferentes maneras, debemos elegir la más simple y la que tenga menos líneas de código.

Linked server rebelde

Se presentó una situación bien curiosa con un linked server creado en un SQL Server 2008 r2 que iba hacia un PostgreSQL.

El linked server denominado LINK_PSQL me mostraba el catálogo a mi (el DBA) y a otros dos compañeros de desarrollo

pero a otros compañeros no. Pensé que quizás era la versión del Managment Studio así que les hice la maldad y les dije que actualizarán a la última versión disponible que era la que teníamos a los que si nos funcionaba (maldad porque es muy lenta …) y aún así les seguía fallando.

Revisamos permisos a nivel de red, de base de datos y nada…

La solución llegó cuando decidí crear la conexión usando el ODBC y registrando el DSN

Se borró el linked server anterior y se recreo usando el Provider Microsoft OLE DB Provider for ODBC Drivers e invocando el DSN anterior

Y ahora todos los compañeros pueden desplegar el catálogo.

Conectar Oracle Apex con SQL Server [Primera parte]

Hoy vamos a tratar de establecer una conexión entre Oracle Apex y SQL Server solo por mero entretenimiento, aunque este tipo de conexiones (básicamente es de oracle a sql server) pueden servir para una gran cantidad de cosas que la imaginación del desarrollador pueda tener (generar reportes, crear aplicaciones, usos de APIS, monitoreo, etc).

Como DBA puedo de pronto estar interesado en generar este tipo de conexión quizás para hacerme a un tablero centralizado de monitoreo desde donde pueda tener en un solo formulario información puntual (que solo nos interesa a los DBA) de una o varias bases de datos al tiempo.

Para empezar, si no sabes qué es Oracle Apex te recomiendo que te des una pasadita por este enlace para que te enteres del asunto; pero a groso modo, Oracle Apex es una plataforma de desarrollo gratuita que puedes usar con cualquier versión (desde la 9i … creo) y distribución de bases de datos Oracle (XE, SE, EE).

Es bueno que la ensayen; les aseguro que les va gustar bastante; es relativamente muy fácil de manejar para usuarios que tienen un nivel básico de SQL y PL/SQL y super, super fácil para aquellos que además de esto conocen o tienen alguna experiencia con javascript (aunque no es determinante para usarla).

No más carreta; a lo que vinimos…

El escenario:

Tengo un Oracle XE 18c con el Oracle Apex 20 instalado sobre una CentOS 7; para instalarlo me base en una guía de Oracle que les comparto en este enlace.

Tengo en otro server un windows con SQL Server 2008 SE r2 con una base de datos de prueba que nos servirá para validar las consultas.

Con las bases de datos ya configuradas (incluyendo el Apex) y funcionando debemos entonces buscarnos el ODBC (Open DataBase Connectivity) y las tools que nos servirá de intermediario entre Oracle y SQL Server y que podemos descargar de esta web.

Yo me voy a bajar este que el que coincide con el sistema operativo donde está el Oracle:


Pero si Ud. requiere otro para otra distro diferente también puede haciendo clic aquí y eligiendo la adecuada:

Ya con el software descargado todo es cuestión de cargarlo en nuestro Linux o si no quieres dar toda esa vuelta pues te lo bajas directamente a tu consola usando wget:

Instalamos el odbc teniendo en cuenta que éste instala sus librerías por default en la ruta /opt de linux así que ese directorio debe existir:

Escribimos la palabra YES y presionamos la tecla Enter para aceptar la licencia

Hacemos lo mismo con las tools

Validamos que se haya creado el directorio microsoft en el /opt de nuestro Linux

Ejecutamos las siguientes instrucciones:

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

y luego verificamos el nombre de la librería para cargarla (o verificar que quedó registrada) en el odbcinst.ini. Accedemos entonces a la siguiente ruta: /opt/microsoft/msodbcsql17/lib64 y listamos los archivos

El archivo que se visualiza en color verde debe ser el mismo que nos debe aparecer en el odbcinst.ini; algo como esto:

En ese archivo quedan registrados nuestros controladores odbc, en mi caso tengo el de PostgreSQL con el que más adelante haremos también un artículo; el MySQL y ahora el SQL Server.

Vamos a cambiarle nombre a ese identifiacador por algo más corto, algo como [ODBC_Server]:

Si estamos usando el firewall, debemos adicionar el puerto por el que escucha el SQL Server; en mi caso como es de pruebas está en el puerto por default (nada recomendable…)

Es hora de configurar una conexión y probar… Vamos entonces a editar nuestros archivo odbc.ini usando el comando vi o nano:

nano /etc/odbc.ini

E ingresamos algo similar a esto:

Guardamos….

En el entorno de windows esto es lo que tengo:

Y vamos a probar que desde el Linux nos devuelva esos mismo registros. Digitamos entonces algo como esto:

isql -v SQL_Server usrtest usrtest

Nos debe aparecer algo como esto:

Lo que nos indica que por lo menos, ya tenemos conexión…

Ahora generamos la consulta para obtener los datos del SQL Server, de la tabla tbl_prueba de la base de datos DB_TEST

Eureka!!

Ya tenemos nuestro CentOS conectando y recuperando información de nuestro SQL Server ubicado en un servidor Windows.

En el próximo capítulo vamos a ver cómo aprovechar esto para configurar el hs de Oracel y desde APEX generar reportes y otras cositas sobre la base de datos SQL Server.

Borrón y cuenta nueva!

En el año 2008 me encontraba super aficionado aprendiendo Python de forma autodidacta, recuerdo que para aquella época me conseguí un pdf que me sirvió muchísimo, “Introducción a la Programación con Python”, escrito por Andrés Marzal e Isabel Gracia del Departamento de Lenguajes y Sistemas Informáticos de la Universitat Jaime I.

Aún se puede encontrar disponible en algunas webs

Una vez terminado ese pdf me anime a ir un poquito más allá, y habiendo conocido ya otros lenguajes de programación como (los de la época claro estáPascal y su versión gráfica Delphi (creo que iba por la versión 7) del que prefería su equivalente Lazarus Pascal por ser free y del mismo modo el Visual Basic, del que prefería el Gambas de Linux (es genial, lástima que sus desarrollos no fueran multiplataforma) ; quise buscar una interfaz gráfica para trabajar con Python (multiplataforma o que por lo menos funcionara bien en Linux y Windows) y afortunadamente encontré dos (de entre varios) que me llamaron mucho la atención y que comencé a “cacharrear” como decimos por acá en Colombia. El VisualWx y el Boa Constructor.

Después de aprenderlos a usar y crear pequeños programas (por aquellos días andaba también muy de moda el tema de los blogs), cree un blog en Blogger y diseñe un pequeño tutorial donde mostraba cómo usar el VisualWx y luego el Boa Constructor.

En aquella época me sobraba un poco más de tiempo que ahora, pero el acceso a internet no era tan amplio como hoy y con las ocupaciones laborales y familiares las publicaciones fueron siendo cada vez más espaciadas y dejé de publicar en noviembre de 2016.

Quiero retomar el compartir mis experiencias y conocimientos; sigo sin mucho tiempo por lo que este blog ya con hosting y dominio pago (a ver si así me esfuerzo más en sacarle provecho a la inversión) no tendrá una publicación periódica pero haré mi mejor esfuerzo en tratar de publicar lo más seguido posible o si Usted amig@ lector se anima a publicar alguna experiencia, algún tratamiento a un error de un server, de una base de datos, un tuning a un query, un pequeño truco de python, django, flask, etc; escribe que seguramente te lo publicaré.

Me alegra estar de vuelta; para mi esto es como un borrón y cuenta nueva en este mundo de los blogs y siempre serán bienvenidas las sugerencias y/o aportes.