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()