miércoles, 3 de febrero de 2021

Otras operaciones sobre un modelo en Sequelize

Otras operaciones sobre un modelo en Sequelize

Crear  varias instancias a la vez

Además de actualizar una sola instancia con BulkCreate, también podemos crear varias instancias a la vez.

Usuario.bulkCreate([

  { dni: '001', nombre: 'Juan'},

  { dni: '002', nombre: 'Pedro'}

  ]

  )

.then(function(success) {

console.log("La instancias han sido creadas correctamente");

}, function(err) {

console.log(err + " Un usuario ya existe en la base de datos");

});   

Visualizar los valores de una instancia

Al insertar una instancia, vamos a usar success.get({ plain: true }) para visualizar la instancia insertada

Usuario.create(

  { dni: '001', nombre: 'Juan'}

  )

.then(function(success) {

  console.log(success.get({ plain: true }))

console.log("La instancia ha sido creada correctamente");

}, function(err) {

console.log(err + " El usuario ya existe en la base de datos");

}); 

 

O tambien podemos usar console.log(JSON.stringify(success));

 

Recarga de instancias

Si necesitamos sincronizar la instancia, podemos usar el método de reload.
Obtendremos los datos actuales de la base de datos y sobrescribirá los atributos
del modelo en el que se ha llamado al método.
 

Usuario.findOne(

    {

      where:

        { nombre: 'Juan' }

    }).

    then(function (usuario) {

      if (usuario == null) {

        console.log('No existe ningun usuario con ese nombre')

      } else {

        usuario.nombre='Pedro'

        console.log(usuario.dni + ' ' + usuario.nombre);

        usuario.reload().then(() => {

        console.log(usuario.dni + ' ' + usuario.nombre);

      })

      }

      

    }).catch(function (err) {

      console.log(err + ': Error de obtencion de Usuario');

    });

Incremento

Tenemos un producto que tiene los siguientes valores:·    

  • id
  • nombre
  • valor

Incremento del campo valor en 2:

 

var Producto = require('./models/producto')(sequelize, Sequelize.DataTypes);

 

  Producto.findByPk('1').

  then(function (producto) {

    if (Producto== null) { 

      console.log('El producto no encontrado en la base de datos')

    } else {

      producto.increment('valor',{by: 2} );

    }

  }).catch(function (err) {

     console.log(err + ': Error de obtencion de producto');

}); 

Drecemento

Tenemos un producto que tiene los siguientes valores:

  • id
  • nombre
  • valor

Decremento del campo valor en 2:

 

var Producto = require('./models/producto')(sequelize, Sequelize.DataTypes);

 

  Producto.findByPk('1').

  then(function (producto) {

    if (Producto== null) { 

      console.log('El producto no encontrado en la base de datos')

    } else {

      producto.decrement('valor',{by: 2} );

    }

  }).catch(function (err) {

     console.log(err + ': Error de obtencion de producto');

}); 

martes, 26 de enero de 2021

Operaciones CRUD sobre un modelo en Sequelize

Operaciones CRUD sobre un modelo en Sequelize


var Usuario = require('./models/Usuario')(sequelize, Sequelize.DataTypes);

Creacion de una instancia


Una instancia de la clase representa un objeto de ese modelo

Por ejemplo:

var usuario = Usuario.build({nombre: "Juan", primerApellido : "Garcia"});

Para persistir esta instancia en la base de datos:

usuario.save();


Otra forma de crear instancias:

Usuario.create({ dni: '001',
nombre: 'Juan',
})
.then(function(success) {
console.log("La instancia ha sido creada correctamente");
}, function(err) {
console.log(err + " El usuario ya existe en la base de datos");
});


Read de una instancia

Usuario.findByPk('001').
    then(function (usuario) {
      if (usuario == null) {
        console.log('El usuario no encontrado en la base de datos')
      } else {
        console.log(JSON.stringify(usuario));
      }
    }).catch(function (err) {
       console.log(err + ': Error de obtencion de Usuario');
 });

Update de una instancia

 Usuario.update(
    {
      nombre: "Pedro",
    },
    {
        where: {
            dni: '001',
        }
    })
    .then(function (success) {
        if (success==0){
        console.log('El usuario no existe en la base de datos')
        }else{
            console.log('Usuario modificado correctamente');
        }        
    })
    .catch(function (err) {
        console.log('Error de update de Usuario');
    })

Delete de una instancia

Usuario.destroy(
    {
        where: {
            dni: '001',
        }
    })
    .then(function (success) {
        console.log(success);
        if (success==0){ //Si no encuentra ningun registro
           console.log('El usuario no existe en la base de datos')
        }else{
            console.log('Usuario borrado correctamente');
        }        
    })
    .catch(function (err) {
        console.log(err + ': Error de borrado de Usuario');
    })

Delete de una instancia

Usuario.destroy(
    {
        where: {
            dni: '001',
        }
    })
    .then(function (success) {
        console.log(success);
        if (success==0){ //Si no encuentra ningun registro
           console.log('El usuario no existe en la base de datos')
        }else{
            console.log('Usuario borrado correctamente');
        }        
    })
    .catch(function (err) {
        console.log(err + ': Error de borrado de Usuario');
    })

usuario.destroy({ force: true })

Modelos en Sequelize

Modelos en Sequelize

Un modelo es una abstracción que representa una tabla en la base de datos, nos dice el nombre de la tabla en la base de datos y las columnas que tiene y sus tipos de datos, el nombre del modelo no tiene porque coincidir con el nombre de la tabla en la base de datos, generalmente estas se ponen en singular y los nombres de las tablas en plural.

 

Definicion de un Modelo

Los modelos se pueden definir de dos formas equivalentes en Sequelize:

  •     Mediante sequelize.define
  •     Creando una clase derivada de Model y llamando a init


Mediante sequelize.define

Vamos a crear un modelo para representar usuarios, que tienen un nombre y un apellido. Queremos que nuestro modelo se llame Usuario y la tabla que representa se llame Usuarios en la base de datos.

 
var { Sequelize, Model, DataTypes } = require('sequelize');
var main = function () {
var sequelize = new Sequelize('mysql://javier:javier@localhost:3306/appORMUserProyect',
{
pool : {
  max: 90,
  min: 0,
  acquire: 30000,
  idle: 10000
}
}
);
sequelize
   .authenticate()
   .then(() => {
     console.log('Connection has been established successfully.');
   })
   .catch(err => {
     console.error('Unable to connect to the database:', err);
   });
   var Usuario = sequelize.define('Usuario', {
    // Model attributes are defined here
    nombre: {
      type: DataTypes.STRING,
      allowNull: false
    },
    primerApellido: {
      type: DataTypes.STRING
      // allowNull defaults to true
    }
  }, {
    sequelize, timestamps: false
  });
  sequelize.sync();
}();


Creando una clase derivada de model

var { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
    class Usuario extends Model { }
    Usuario.init({
        dni: {
            type: DataTypes.STRING,
            primaryKey : true
        },
        nombre: {
            type: DataTypes.STRING,
            allowNull: false
        },
    },        
        {
            sequelize,
            timestamps: false,
            modelName: 'Usuario'
        }
    );
    return Usuario;
}


Sincronizar un Modelo

 Usuario.sync({ force: true }).then(() => {
  return Usuario.create({
    dni: '001',
    nombre: 'Juan'
              });
            }); 

Sincronizar todos los modelos

En lugar de llamar a sync () para cada modelo, puede llamar a sequelize.sync () que sincronizará automáticamente todos los modelos.

sequelize.sync();

Modelo Paranoid

Sequelize apoya el concepto de tablas paranoicas. Una tabla paranoica es aquella que, cuando se le dice que elimine un registro, no se va a eliminar realmente, solo se va eliminar en sequielize pero no en la base de datos.

Va a tener una columna especial llamada deletedAt que tiene la fecha y la hora de esa solitud de eliminacion.

Definición de un modelo como paranoid

Para hacer que un modelo sea paranoico, se debe de poner la opción paranoid: true a la definición del modelo. Paranoid necesita la opcion timestamps a true para funcionar

Podemos cambiar el nombre preterminado de la columna deletedAt por otro nombre

var { Model } = require('sequelize');
var { Sequelize, Model, DataTypes, Op, UniqueConstraintError } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
    class Usuario extends Model { }
    Usuario.init({
       dni: {
            type: DataTypes.STRING,
            primaryKey : true
        },
        nombre: {
            type: DataTypes.STRING,
        }
    },
        {
            sequelize,
            timestamps: true,
            paranoid: true,
            deletedAt: 'destroyTime', //Cambio de nombre a esta  columna
            modelName: 'usuario'
        }
    );
    return Usuario;
}

 

Si queremos una eliminacion dura en nuestro modelo, entonces vamos a usar la opcion  force: true

Usuario.destroy(
    {
        where: {
            dni: '001',
        },
        force : true
    })
    .then(function (success) {
        console.log(success);
        if (success==0){ //Si no encuentra ningun registro
           console.log('El usuario no existe en la base de datos')
        }else{
            console.log('Usuario borrado correctamente');
        }  
    }).catch(function (err) {
        console.log(err + ': Error de borrado de Usuario');
    })

miércoles, 20 de enero de 2021

Sequelize

Sequelize

Es un ORM de node.js que se utiliza para hacer consultas y operaciones en una base datos por ejemplo para Postgres, MySQL, MariaDB, SQLite y Microsoft SQL Server.

Instalacion de sequelize

npm install --save sequelize

npm install --save mysql2



Configuracion de la conexión

Para conectarnos  a la base de datos, debemos crear una instancia de Sequelize. Esto se puede hacer de dos maneras:

Pasando los parámetros de conexión al constructor sequelize:

var sequelize = new Sequelize('nombreBaseDatos','usuario,'password',{

host: 'localhost',

dialect: 'mysql'

}); 

 

Pasando un único URI de conexión:

var sequelize = new Sequelize(

'mysql://usuario:password@nombreHost:puerto/basebd');


 

Verificación de la conexión a la base de datos

sequelize .authenticate()
.then(() => {
console.log('Conexión correcta a la base de datos');
})
.catch(err => {
console.error('Error de conexión a la base de datos', err);
});


Cierre de la conexión

sequelize.close() 

miércoles, 7 de octubre de 2020

Como añadir bootstrap a un proyecto

 Como añadir bootstrap a un proyecto

Boostrap es un framework de front-end, es multiplataforma, es de codigo abierto, tiene elementos de diseño como cuadros, botones, menus de navegacion y un conjunto de herramientas para diseño de aplicaciones web, el cual esta basado en HTML, CSS, y ademas de plugins de Javascript.

Tenemos dos formas de agregar bootstrap a nuestro proyecto de angular:

  • Mediante Angular CLI usando npm install 
  • Mediante CDN

Mediante Angular CLI

Desde la interfaz de línea de comando, instalamos bootstrap y hacemos referencia a él en angular.json

npm install bootstrap –save

Si deseamos utilizar la función Javascript de arranque, debemos instalar JQuery y popperjs con él. BootstrapJS depende de Jquery

npm install jquery –save

Si necesitamos la funcionalidad de un popover(Cuadro emergente que aparece cuando el usuario hace clic en un elemento. La diferencia es que el popover puede contener mucho más contenido.) En una aplicación angular, puede agregar popper.js.

npm install popper.js –save

 Hacemos referencia a la ruta en el archivo angular.json. y lo insertamos debajo del nodo build

 

"styles": [

"node_modules/bootstrap/dist/css/bootstrap.min.css",

 

"src/styles.scss"

 

],

 

"scripts": [

 

"node_modules/jquery/dist/jquery.min.js",

 

"node_modules/bootstrap/dist/js/bootstrap.min.js"

]

Mediante CDN

Vamos a utilizar un servidor donde se alojan los archivos de boostrap para ello añadimos a index.html de nuestro proyecto angular:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"

    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

 

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"

    integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"

    crossorigin="anonymous"></script>

 

  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"

    integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"

    crossorigin="anonymous"></script>

 

  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"

    integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"

    crossorigin="anonymous"></script>

 

index.html:

<!doctype html>

<html lang="en">

 

<head>

  <meta charset="utf-8">

  <title>Pruebas</title>

  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="icon" type="image/x-icon" href="favicon.ico">

  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet">

  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"

    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

</head>

 

<body>

  <app-root></app-root>

  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"

    integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"

    crossorigin="anonymous"></script>

 

  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"

    integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"

    crossorigin="anonymous"></script>

 

  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"

    integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"

    crossorigin="anonymous"></script>

</body>

</html>