DEV Community

Alexander
Alexander

Posted on • Originally published at alexanderae.com

Peewee: ORM para python - I

¿Qué es?

Peewee es un ORM para python. Incluye soporte para SQLite, MySQL, PostgreSQL y Cockroachdb.

¿Qué es un ORM?

Sus siglas significan Object-Relational mapping, o en español: Mapeo Objeto-relacional. Es una técnica que permite convertir entre los tipos de datos usados en los lenguajes de programación orientados a objetos y los tipos de datos de algun sistema de base de datos relacional.

Instalación

Se instala mediante pip.

pip install peewee

Para comprobar que se haya realizado la instalación, podemos acceder a la consola interactiva de python y escribimos:


>>> import peewee
>>> peewee.__version__
3.13.1
Enter fullscreen mode Exit fullscreen mode

puede consultar más información sobre la instalación aquí.


Ejemplo de uso

Para ilustrar1 la idea, utilizaremos el mismo ejemplo de un post anterior que realicé sobre sqlalchemy.

El ejemplo es sobre un modelo de datos para un sistema que se encarga de administrar registros de libros, autores, y etiquetas (o temas, para los libros).

El esquema del modelo es el siguiente:

modelo-libros

Consiste en las tablas Libro, Autor y Etiqueta principalmente.
Las tablas intermediarias etiqueta_libro y autor_libro se utilizan para expresar la relación de muchos a muchos entre las otras tablas.

Primero, debemos mapear el modelo de la base de datos por medio de peewee, para lo cual escribí tenemos el archivo siguiente que nombrare models.py:


import datetime

from peewee import *

db = SqliteDatabase('libros.db')


class Autor(Model):
    nombre = CharField(max_length=120)

    class Meta:
        database = db


class Etiqueta(Model):
    nombre = CharField(max_length=120)

    class Meta:
        database = db


class Libro(Model):
    titulo = CharField(max_length=120, index=True)
    fecha_publicacion = DateField(default=datetime.datetime.now)
    isbn = CharField(max_length=13, index=True, unique=True)
    autores = ManyToManyField(Autor, backref='libros')
    etiquetas = ManyToManyField(Etiqueta, backref='libros')

    class Meta:
        database = db


db.connect()
db.create_tables([Autor,
                  Etiqueta,
                  Libro,
                  Libro.autores.get_through_model(),
                  Libro.etiquetas.get_through_model()]
                 )
Enter fullscreen mode Exit fullscreen mode

Lo que realiza el código anterior es lo siguiente:

  1. Importa los módulos necesarios

  2. Realiza la conexión a la base de datos, en este caso corresponde a sqlite

  3. Mapeamos las tablas como clases, utilizando los tipos de datos de peewee.

  4. Añadimos las relaciones entre las tablas por medio del campo ManyToManyField

  5. Al final, usamos la sentencia:

        db.create_tables
    

    observando que para crear las tablas intermedias (libro_autor y libro_etiquetas) utilizamos una sintaxis especial.

y ejecutamos el script mediante:

        python models.py
Enter fullscreen mode Exit fullscreen mode

Con ello, observaremos que se creó el archivo "libros.db" el cual contiene nuestra base de datos.

Se puede verificar el contenido de las tablas mediante sqliteman2


La inserción de registros la podemos realizar de la siguiente manera:


autor_1 = Autor.create(nombre='Patrick Rothfuss')
autor_2 = Autor.create(nombre='Fred Saberhagen')
autor_3 = Autor.create(nombre='Julio verne')

etiqueta_1 = Etiqueta.create(nombre='Ciencia Ficción')
etiqueta_2 = Etiqueta.create(nombre='Fantasía')

libro = Libro.create(titulo='El nombre del viento', isbn='9788401337208')
libro.autores = [a1, a2]
libro.etiquetas = [etiqueta_1]
Enter fullscreen mode Exit fullscreen mode

Para modificar algún campo solo debemos modificar el atributo y llamar al método save:

autor_3.nombre = 'Julio Verne'
autor_3.save()
Enter fullscreen mode Exit fullscreen mode

Y las consultas son medainte el método select y los filtros mediante el método where :

libro = Libro.select().where(Libro.isbn == '9788401337208')[0]
print(libro.titulo)
Enter fullscreen mode Exit fullscreen mode

Espero que el post pueda brindar una idea del cómo funciona peewee.


  1. Para información más amplia puede guiarse de la documentación 

  2. Sqliteman es un gestor de base de datos para sqlite3 

Top comments (0)