Contenido

Peewee, un ORM para Python

Contenido

Estoy acostumbrándome a usar Django para casi todo, y su ORM para acceder a la base de datos. Es muy completo y permite evitar tener que escribir SQL a mano, añadiendo la posibilidad de cambiar de motor de base de datos sin que sea traumático.

Sin embargo, a veces necesito guardar cosas en disco desde programas de línea de órdenes, y no me parece bien depender de Django para algo así. En estos casos suelo usar Shelve, de la librería estándar, pero no es lo suficientemente versátil: no admite concurrencia.

En este post voy a explicar cómo utilizar Peewee como ORM.

Python

Peewee

Lo primero que me llamó la atención de Peewee es la documentación, ya que su Quickstart es sencillo de entender y va al grano.

Veamos un ejemplo mínimo (sacado del Quickstart):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db # This model uses the "people.db" database.

Resulta fácil de leer, ¿verdad?

En este caso se crea una tabla Person. Vamos a conectarnos y a crear algunos datos:

1
2
3
4
5
6
7
# from datetime import date

db.connect()
db.create_tables([Person], safe=True)

uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15), is_relative=True)
uncle_bob.save()

Como veis, conectamos a la base de datos, se crean las bases de datos (el safe permite evitar un error si las tablas ya existen) y se crea una entrada.

Vamos ahora a corregir la fecha de nacimiento:

1
2
3
4
5
6
7
8
# from datetime import date

db.connect()
db.create_tables([Person], safe=True)

uncle_bob = Person.get(Person.name == 'Bob')
uncle_bob.birthday = date(1965, 2, 25)
uncle_bob.save()

Simple y claro.

SGBD

Peewee soporta distintos SGBD, es decir, Sistemas Gestores de Bases de Datos (en inglés, DBMS, de Database Management Systems). Desgraciadamente sólo soporta tres, pero suelen ser los más habituales: SQLite, MySQL y Postgresql. Basta con cambiar la declaración inicial de db y está hecho.

pwiz

Por si no fuera ya bastante molón de por sí, incluye pwiz, que es un programa que permite obtener los modelos Peewee a partir de la base de datos:

1
python -m pwiz -e postgresql my_blog > blog_models.py