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!

 

Herramientas de SAGA no se muestran en QGIS 2.18 en Ubuntu 16.04

Después de instalar la versión de 2.18 de QGIS y de haber instalado la versión 2.2.3 de SAGA en mi PC con Ubuntu 16.04, las herramientas de SAGA no me aparecían en la caja de herramientas de QGIS.

Buscando en internet encontré la solución en el sitio de gis.stackexchange.com.

Cerré QGIS y edité el archivo:  /usr/share/qgis/python/plugins/processing/algs/saga/SagaAlgorithmProvider.py
Cambiando la línea 76:
if not version.startswith(‘2.3.’):
por:
if not version.startswith(‘2.2.‘):

Guardé cambios, ejecuté nuevamente QGIS y las herramientas de SAGA aparecieron. Al parecer las nuevas versiones de QGIS 2.18 busca la versión 2.3.x de SAGA, y es por eso que no inicializaba las herramientas.

¡Hasta la próxima!

Cómo definir una llave primaria (primary key) en una tabla existente en Oracle.

Supongamos que tenemos una tabla sin llave primaria y todos sus campos fueron definidos para aceptar valores nulos. El comando CREATE TABLE de dicha tabla se ejecutó así:

Una llave primaria o PRIMARY KEY puede estar formada por uno o varios campos, cuyos valores permiten identificar un sólo registro en la tabla. Luego entonces el campo que vayamos a escoger no debe permitir valores nulos (sin valor) ni repetidos. Identificamos que los valores del campo CVE_ENT son irrepetibles y que identifican a un sólo registro en la tabla.

Para modificar las propiedades de este campo y  que este no permita nulos de ahora en adelante, ejecutamos la siguiente sentencia:

Alteramos la tabla ENTIDAD modificando el campo CEV_ENT especificándole la restricción NOT NULL. Una vez ejecutada la sentencia, el campo ya no permitirá valores nulos.

Una vez logrado esto, procedemos a definir el campo CEVE_ENT como llave primaria de la tabla de esta forma:

Alteramos la tabla ENTIDAD agregando la restricción llave primaria (PRIMARY KEY) llamada ENTIDAD_PK conformada por el campo CVE_ENT.

Cabe aclarar que la restricción PRIMARY KEY, en Oracle, lleva implícito el no aceptar valores nulos en los campos que la conforman, sin embargo es buena práctica especificar explícitamente antes que el campo o campos que conformarán dicha llave primaria no acepten nulos con la sentencia ALTER que vimos anteriormente, ya que algunos motores de bases de datos así lo requieren.

¡Hasta la próxima!

 

 

 

Cómo llenar un control comboBox de Windows Forms con una colección en c# .Net

Existen muchas formas de llenar un control comboBox en Windows Forms obteniendo los datos de varias fuentes. En este artículo veremos como llenarlo a través de un objeto de tipo colección (List) conteniendo objetos  tuplas (Tuple), obteniendo los datos con el que llenaremos los tuplas de los resultados de una consulta a una base de datos. El código asume que ya se abrió una conexión a la base de datos y se ejecutó una consulta y se están leyendo los datos que arrojó la misma.

 

El código está comentado para su mejor entendimiento.

Espero les sea útil.

¡Hasta la próxima!

 

Como conectar a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora.

Enseguida les comparto el código en ¢# (c sharp) para hacer una conexión a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora externo que defina la conexión.

Antes de ejecutar el código sobra decir que debes contar con los controladores .Net (drives)  de conexión a Oracle 12c instalados en la máquina de desarrollo y el proyecto debe hacer referencia a la clase Oracle.ManagedDataAccess.

No olvides cambiar los valores de HOST (nombre o ip de la computadora donde está instalada la base de datos), PORT (puerto de conexión), SERVICE_NAME (nombre de la instancia de la base de datos Oracle), User Id (usuario) y Password (contraseña), por los valores correctos de tu base de datos.

¡Hasta la próxima!

Error 1921 al hacer copia de archivos con robocopy.

Este error suele arrojarlo cuando copiamos  carpetas de usuarios con el comando robocopy, más precisamente el directorio AppData, ya que contiene uniones (junctions) o enlaces simbólicos (symbolic links) quw windows 10 usa para compatibilidad con sistemas más antiguos y esto ocasiona una copia recursiva o cíclica sin fin creando rutas de directorios demasiado largos hasta que marca este número de error con el mensaje de que no puede encontrar el archivo .

Para evitar este error basta con agregar el switch o parámetro /xj al comando robocopy, por ejemplo así:

robocopy C:\Carpeta_origen D:\Carpeta_destino /MIR /xj

/xj le indica al comando robocopy ignorar enlaces simbólicos.

¡Hasta la próxima!

Formatear campo fecha con sql en Oracle con la función to_char().

Varias formas de mostrar un campo fecha con la función to_char()  de sql en Oracle; asumimos en los ejemplos siguientes, que  el campo s.CREATED  es un campo de tipo date de una tabla cualquiera; abajo de cada uno se muestra la salida que obtendríamos para un mismo valor del campo aplicando la función to_char():

¡Espero y les sea útil!

¡No olviden visitar a los anunciantes!¡Hasta la próxima!

¿Qué monitor es mejor para gaming?

Cuando se piensa adquirir un monitor gaming (para usar con videojuegos) es importante observar las siguientes características:

  • Prefiere los monitores LED que, aunque son más caros que los LCD,  proporcionan una mejor calidad en el color que éstos últimos.
  • Revisa su tiempo de respuesta, para juegos, entre más pequeño mejor. Compra aquellos que te den un tiempo de respuesta de 2 milisegundos (ms) o menos.
  • La tasa de refresco o actualización (refresh rate) entre mayor, mejor. Busca aquellos que como mínimo te den 60 Hz o más. 144 Hz sería lo ideal.
  • La resolución, que sea Full HD (1920 x 1080 pixeles). Los monitores 4K son muy caros actualmente y su tasa de refresco es menor de lo recomendado, así que estos pueden esperar.
  • El tamaño del monitor, dependerá del espacio que tengas asignado para ellos. Entre 20 y 24 pulgadas estaría bien. ¿Más grande? Depende de tu espacio y presupuesto.
  • Capacidades 3D. ¿Tu tarjeta de video tiene capacidades 3D? Si es así la tasa de refresco del monitor que sea de 120 Hz como mínimo.

Basado en el artículo: 7 Considerations In Choosing A Gaming Monitor

¡Hasta pronto!

 

¿Qué es una cámara de video IP o cámara de red?

La cámara IP o de red, es una videocámara que permite enviar imágenes de video directamente a una red local, como la red que existe en nuestra casa o negocio, o a la red de Internet, sin la necesidad de tener una computadora o grabadora externa. Pueden conectarse a la red ya sea en forma inalámbrica (wifi) o alámbrica.

Estas cámaras cuentan con su propia computadora que les permiten grabar el video a tarjetas de memoria incrustadas en ellas, memorias como las memorias que usan las cámaras de fotografía digital o algún dispositivo de almacenamiento en la misma red.

Algunas permiten grabar tanto audio como video y hasta permiten la intercomunicación vía audio, es decir envían y reciben audio. Otras tienen la capacidad de detectar movimiento y activar ya sea la toma de fotos o video en ese momento y enviarlos directamente vía correo electrónico al usuario. También permiten programar o especificar las horas de grabación del video.

Las hay de baja resolución, alta resolución (HD o 720p), Full HD (1080p) y más. Entre mayor resolución tenga la cámara mejor se verán los detalles en las imágenes o videos. El video en tiempo real de estas cámaras se pueden ver ya sea a través de un navegador web o de aplicaciones (apps) en tu celular.

Hay otras que permiten que el usuario haga acercamientos o alejamientos (zoom) remotamente y algunas hasta permiten girar o mover la cámara para cambiar el ángulo de visión siempre y cuando la cámara cuente con este mecanismo.

Cuando compren cámaras de este tipo para vigilancia, hay que fijarse bien en las características que nos ofrecen y si cubren nuestras necesidades más importantes.

Espero les sea útil este artículo.

¡Hasta el próxima!

Fallo con la variable PATH al comprobar requisitos al instalar Oracle 12c.

Si al instalar Oracle 12c en Windows 10 te muestra un estado fallido relacionado con la variable PATH al momento de comprobar requisitos del sistema y, según el mensaje de verificación dice que se debe a la longitud de la variable PATH, puede que no sea la longitud de dicha variable el problema.

Al mostrar detalles del mensaje decía esto: “PRVF-3919 : Failed to retrieve value of environment variable “PATH”” y sugiere que pueden ser errores de privilegios o permisos como muestra la siguiente imagen:

Si revisas tu variable PATH y encuentras que su valor no está demasiado grande (más de 1024 caracteres) entonces puedes sin problemas indicarle al instalador que ignore el error activando  el cuadro de selección “Ignorar Todo” y proceder con la instalación. Así lo hice y Oracle está funcionando correctamente. Al parecer es un bug del instalador con la versión de Windows 10.

Que éste artículo les sea útil. ¡Hasta la próxima!