Example #1
0
class CategoriaModel(bd.Model):
    __tablename__ = "t_categoria"
    categoriaId = bd.Column(
        name="categoria_id",  # Nombre de la col en la bd
        type_=bd.Integer,  # tipo de dato en la bd
        primary_key=True,  # setear si es PK(True) o no (False)
        autoincrement=True,  # setear si va a autoincrementarse
        nullable=False,  # seter si va a admitir valores nulos o no
        unique=True  # si no se va a repetir el valor
    )
    categoriaDescripcion = bd.Column(name="categoria_descripcion",
                                     type_=bd.String(45),
                                     nullable=False,
                                     unique=True)
    # esto no crea las relaciones simplemente sirve para le momento de hacer consultas con JOIN's
    libros = relationship('LibroModel', backref='categoriaLibro', lazy=True)

    def __init__(self, nombre):
        self.categoriaDescripcion = nombre

    def save(self):
        bd.session.add(self)
        bd.session.commit()

    def json(self):
        return {
            'categoria_id': self.categoriaId,
            'categoria_nombre': self.categoriaDescripcion,
        }
Example #2
0
class SedeModel(bd.Model):
    __tablename__ = "t_sede"
    sedeId = bd.Column(name="sede_id", type_=bd.Integer,
                       primary_key=True, autoincrement=True, unique=True)
    sedeUbicacion = bd.Column(name="sede_ubicacion", type_=bd.String(45))
    # con el tipo de dato DECIMAL se pueden indicar el total de numeros y el total de decimales
    # https://docs.sqlalchemy.org/en/13/core/type_basics.html?highlight=datatypes#sql-standard-and-multiple-vendor-types
    sedeLatitud = bd.Column(name="sede_latitud", type_=bd.DECIMAL(9,7), nullable=False) 
    sedeLongitud = bd.Column(name="sede_longitud", type_=bd.DECIMAL(9,7), nullable=False)
    
    libros = relationship('SedeLibroModel', backref='sedeLibro')

    def __init__(self, ubicacion, latitud, longitud):
        self.sedeUbicacion = ubicacion
        self.sedeLatitud = latitud
        self.sedeLongitud = longitud
    
    def save(self):
        bd.session.add(self)
        bd.session.commit()
    
    def json(self):
        return {
            'sede_id': self.sedeId,
            'sede_ubicacion': self.sedeUbicacion,
            'sede_latitud': str(self.sedeLatitud),
            'sede_longitud': str(self.sedeLongitud)
        }
Example #3
0
class AutorModel(bd.Model):
    # para cambiar el nombre de la tabla a crearse
    __tablename__ = "t_autor"
    autorId = bd.Column(
        name="autor_id",  # Nombre de la col en la bd
        type_=bd.Integer,  # tipo de dato en la bd
        primary_key=True,  # setear si va a ser pk o no
        autoincrement=True,  # setear si va a ser AI o no 
        nullable=False,  # setear si va a admitir valores nulos o no
        unique=True,  # si no se va a repetir el valor o no
    )
    autorNombre = bd.Column(name="autor_nombre", type_=bd.String(45))
    # si no indicamos un backref flask lo generara alteatoriamente y sera mas complicado averiguar su nombre
    # el backref sirve para usarse en el modelo hijo (para que nos devuelva los datos del padre)
    # https://docs.sqlalchemy.org/en/14/orm/relationship_api.html#sqlalchemy.orm.relationship
    # lazy => define cuando SQLALchemy va a cargar la data de la base de datos
    # 'select' / True => es el valor por defecto, significa que SQLALchemy cargará los datos segun sea necesario
    # 'join'/ False => le dice a SQLALChemy que cargue la relacion en la misma consulta usan un JOIN
    # 'subquery' => trabaja como un JOIN pero en su lugar de hacerlo en una misma consulta lo hara en una subconsulta
    # 'dynamic' => es especial si se tiene muchos elementos y se desea aplicar filtros adicionales. SQLAlchemy devolvera otro objeto de consulta que se puede customizar antes de cargar los elementos de la bd. Al hacer esto tener en cuenta que el proceso de lectura de la bd puede ser mayor y x ende tener un mayor tiempo de espera
    libros = bd.relationship(
        'LibroModel', backref='autorLibro', lazy=True
    )  # en el caso de fk se apunta al nombre de la tabla, mientras que en los relationship se apunta al nombre del modelo

    # en el caso de los relationship normal no puede estar creado la tabla aún

    def __init__(self, nombreAutor):
        self.autorNombre = nombreAutor

    # el metodo magico __str__ sirve para modificar la forma en que se imprimirá un objeto en consola
    def __str__(self):
        return '{}: {}'.format(self.autorId, self.autorNombre)

    def save(self):
        # el metodo session devuelve la sesion actual y evita que se cree una nueva sesion y asi relentizar la conexion a mi bd
        # el metodo add sirve para agregar toda mi instancia (mi nuevo autor) a un formato que sea valido para la bd
        bd.session.add(self)
        # el commit sirve para que los cambios realizados a la bd se hagan efecto, esto generalmente se usa con transacciones
        bd.session.commit()

    def json(self):
        return {'autor_id': self.autorId, 'autor_nombre': self.autorNombre}

    def delete(self):
        # con el delete se hace la eliminacion TEMPORAL DE LA BASE DE DATOS
        bd.session.delete(self)
        bd.session.commit()
Example #4
0
class CategoriaModel(bd.Model):
    __tablename__ = "t_categoria"
    categoriaId = bd.Column(name="categoria_id", type_=bd.Integer,
                            primary_key=True, autoincrement=True, nullable=False, unique=True)
    categoriaDescripcion = bd.Column(
        name="categoria_descripcion", type_=bd.String(45), unique=True, nullable=False)
    # esto no crea las relaciones simplemente sirve para al momento de hacer consultas con JOIN's
    libros = relationship('LibroModel', backref='categoriaLibro', lazy=True)
    def json(self):
        return {
            'categoria_id': self.categoriaId,
            'categoria_descripcion': self.categoriaDescripcion
        }
    def __init__(self, nombre):
        self.categoriaDescripcion = nombre
    def save(self):
        bd.session.add(self)
        bd.session.commit()
Example #5
0
class AutorModel(bd.Model):
    # para cambiar el nombre de la tabla a crearse
    __tablename__ = "t_autor"
    autorId = bd.Column(name="autor_id",
                        type_=bd.Integer,
                        primary_key=True,
                        autoincrement=True,
                        nullable=False,
                        unique=True)
    autorNombre = bd.Column(name="autor_nombre", type_=bd.String(45))
    libros = bd.relationship(
        'LibroModel', backref="autorLibro"
    )  #En el caso # lazy => define cuando SQLALchemy va a cargar la data de la base de datos

    # 'select' / True => es el valor por defecto, significa que SQLALchemy cargará los datos segun sea necesario
    # 'join'/ False => le dice a SQLALChemy que cargue la relacion en la misma consulta usan un JOIN
    # 'subquery' => trabaja como un JOIN pero en su lugar de hacerlo en una misma consulta lo hara en una subconsulta
    # 'dynamic' => es especial si se tiene muchos elementos y se desea aplicar filtros adicionales. SQLAlchemy devolvera otro objeto de consulta que se puede customizar antes de cargar los elementos de la bd. Al hacer esto tener en cuenta que el proceso de lectura de la bd puede ser mayor y x ende tener un mayor tiempo de espera
    def __init__(self, nombreAutor):
        self.autorNombre = nombreAutor

    def __str__(self):
        return '{}: {}'.format(self.autorId, self.autorNombre)

    def save(self):
        #el metodo session devuelve la sesion actual y evita que se cree una nueva
        #session y asi relentizar la conexion a mi bd
        # el metodo add sirve para agregar toda mi instancia (mi nuevo autor) a un
        # formato que sea valido para la bd
        bd.session.add(self)
        # el commit sirve para que los cambios realizados a la bd se hagan efecto, esto
        # generalmente se usa con transacciones
        bd.session.commit()
        #
    def json(self):
        return {'autor_id': self.autorId, 'autor_nombre': self.autorNombre}

    def delete(self):
        # con el delete se hace la eliminacion TEMPORAL DE LA BASE DE DATOS
        bd.session.delete(self)
        bd.session.commit()
Example #6
0
class SedeModel(bd.Model):
    __tablename__ = 't_sede'
    sedeId = bd.Column(
        name="sede_id",
        type_= bd.Integer,
        primary_key=True,
        autoincrement=True,
        nullable=False,
        unique=True
    )
    sedeUbicacion = bd.Column(
        name="sede_ubicacion",
        type_= bd.String(45)
    )
    sedeLatitud = bd.Column(
        name="sede_latitud",
        type_= bd.DECIMAL(9,7),
        nullable = False,
    )
    sedeLongitud = bd.Column(
        name="sede_longitud",
        type_ = bd.DECIMAL(9,7),
        nullable = False
    )
    libro = relationship('SedeLibroModel', backref='sedeLibro')

    def __init__(self, ubicacion, latitud, longitud):
        self.sedeUbicacion = ubicacion
        self.sedeLatitud = latitud
        self.sedeLongitud = longitud
    def save(self):
        bd.session.add(self)
        bd.session.commit()
    def json(self):
        return{
            'sede_id': self.sedeId,
            'sede_ubicacion': self.sedeUbicacion,
            'sede_latitud': str(self.sedeLatitud),
            'sede_longitud': str(self.sedeLongitud)
        }
Example #7
0
class SedeModel(bd.Model):
    __tablename__ = "t_sede"
    sedeId = bd.Column(
        name="sede_id",
        type_=bd.Integer,  # tipo de dato en la bd
        primary_key=True,  # setear si es PK(True) o no (False)
        autoincrement=True,  # setear si va a autoincrementarse
        nullable=False,  # seter si va a admitir valores nulos o no
        unique=True  # si no se va a repetir el valor
    )
    sedeUbicacion = bd.Column(name="sede_ubicacion", type_=bd.String(45))
    sedeLatitud = bd.Column(name="sede_latitud",
                            type_=bd.DECIMAL(9, 7),
                            nullable=False)
    sedeLongitud = bd.Column(name="sede_longitud",
                             type_=bd.DECIMAL(9, 7),
                             nullable=False)

    libros = relationship('SedeLibroModel', backref='sedeLibro')

    def __init__(self, ubicacion, sedeLatitud, sedeLongitud):
        self.sedeUbicacion = ubicacion
        self.sedeLatitud = sedeLatitud
        self.sedeLongitud = sedeLongitud

    def save(self):
        bd.session.add(self)
        bd.session.commit()

    def json(self):
        return {
            'sede_id': self.sedeId,
            'sede_ubicacion': self.sedeUbicacion,
            'sede_latitud': str(self.sedeLatitud),
            'sede_longitud': str(self.sedeLongitud)
        }
Example #8
0
class LibroModel(bd.Model):
    __tablename__ = "t_libro"
    libroId = bd.Column(name="libro_id",
                        type_=bd.Integer,
                        primary_key=True,
                        unique=True,
                        autoincrement=True)
    libroNombre = bd.Column(name="libro_nombre", type_=bd.String(45))
    libroCantidad = bd.Column(name="libro_cant", type_=bd.Integer)
    # YEAR solo funciona en dialecto MySQL
    libroEdicion = bd.Column(name="libro_edicion", type_=mysql.YEAR())
    # Relaciones (fk)
    autor = bd.Column(bd.ForeignKey('t_autor.autor_id'),
                      name="autor_id",
                      type_=bd.Integer,
                      nullable=False)
    categoria = bd.Column(bd.ForeignKey('t_categoria.categoria_id'),
                          name="categoria_id",
                          type_=bd.Integer,
                          nullable=False)

    sedes = relationship('SedeLibroModel', backref='libroSede')

    def __init__(self, nombre, cantidad, edicion, autor, categoria):
        self.libroNombre = nombre
        self.libroCantidad = cantidad
        self.libroEdicion = edicion
        self.autor = autor
        self.categoria = categoria

    def save(self):
        bd.session.add(self)
        bd.session.commit()

    def json(self):
        return {
            'libro_id': self.libroId,
            'libro_nombre': self.libroNombre,
            'libro_cantidad': self.libroCantidad,
            'libro_edicion': self.libroEdicion,
            'autor_id': self.autor,
            'categoria_id': self.categoria
        }