Publicado el Dejar un comentario

Error al ejecutar pip3 en Ubuntu 18.04: ImportError: cannot import name ‘main’.

Error pip3

Al intentar conocer la versión de mi pip3 instalado, Ubuntu 18.04 me arrojaba el siguiente error:

$ pip3 –version
Traceback (most recent call last):
File “/usr/local/bin/pip3”, line 7, in
from pip import main
ImportError: cannot import name ‘main’

Al parecer es un bug que salta al actualizar a la versión 10 de pip3. Para solucionarlo ejecuté las siguientes instrucciones que encontré aquí (también explica la causa) en una terminal:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip –reinstall

Una vez ejecutada debe funcionar bien este comando y no arrojar ningún error.

¡Saludos!

Publicado el Dejar un comentario

¿Vendes aplicaciones programadas con Java Oracle SE 8? Esto te interesa.

A partir del 2019, el uso no personal de desarrollos en Java SE 8 cambia de licencia comercial:

“Las actualizaciones públicas de la versión 8 de Oracle Java SE seguirán disponibles para uso personal e individual al menos hasta finales de 2020.

Las actualizaciones públicas de la versión 8 de Oracle Java SE que se lancen a partir de enero de 2019 no estarán disponibles para uso empresarial, comercial o de producción sin licencia comercial.”

Para más información y detalles visita: https://www.java.com/es/download/release_notice.jsp

La opción ¿ OpenJDK?

Publicado el Dejar un comentario

Cómo hacer inners joins (concatenaciones internas) con la ORM de Django

Bueno, estamos ahora aquí en un proyecto que utiliza Django como su marco de trabajo.  Y aprendiendo su ORM (mapeo objeto-relacional) me tope con la necesidad de hacer las famosas concatenaciones (joins) entre dos o más entidades.

Anteriormente he trabajado con las ORM de java (Hibernate, EclipseLink) y de .Net (Entity Framework) así que la de ORM  de Django y su QuerySet debería ser capaz de hacer concatenaciones (joins).

Para hacer concatenaciones internas en Django, utilizamos la función select_related(). Según la documentación, esta función sólo sigue relaciones de llaves foráneas (foreign-key), es decir, de tablas hijas a tablas padre o relaciones de uno a uno.

Imagina los registros en una tabla que representa los artículos vendidos de una factura. Llamaremos a la table linea_factura. Esta tabla tendrá como llaves foráneas el identificador de la factura de la tabla factura y el identificador del artículo de la tabla articulo.

Con select_related() sólo podríamos seguir las relaciones de llaves foráneas, es decir sólo podríamos relacional las lineas de la factura con la factura y/o con los artículos pero no en el sentido contrario, es decir, de la factura hacia las lineas de la factura, o de artículos  la linea de artículo. Para esto existe otra función que aún no he probado y espero tratar más adelante.

El código siguiente, que omite la definición de los modelos,  para obtener el QuerySet quedaría así:

lineas_factura = linea_factura.objects.select_related(‘factura’)
.select_relate(‘articulo’).filter(factura__no = 89)

Una vez que el programa haga referencia a la variable lineas_factura, este QuerySet lanzará la consulta sql con dos joins y cargará con los registros de linea_factura y la información relacionada de la tabla factura y de la tabla artículo, donde el número de  factura sea igual a 89. Es decir, la factura número 89 y su detalle.

Espero les sea claro. Si no, comenta el post.

¡Hasta la próxima!