Flask SQLAlchemy guia básica

Tengo una memoria terrible, por lo que me toca o tomar muchos apuntes o cambiar de profesión. Y por ahora estoy escribiendo mucho. A continuación dejo un resumen o guía para utilizar Flask SQLAlchemy. Contempla los casos más básicos que te puedes encontrar: crear, leer, actualizar, borrar, crear relaciones… Si me he dejado algo importante, no duden en demarme un comentario.

Crea el esquema de la base de datos

from User import db
db.create_all()

Consultar

Un resultado por id

User.query.get(300)

Un resultado por filtro

User.query.filter_by(name='Leonidas').first()

Todos los resultados

User.query.all()

like (Sensible a las mayusculas)

User.query.filter(User.name.like='Leo%').all()

ilike (Insensible a las mayusculas)

User.query.filter(User.name.ilike='%spart%').all()

Crudo

resultado = db.engine.execute('select * from User;')
for row in resultado:
    print(row)

Añade un nuevo dato

spartano = User('Leonidas', 'leonidas@300.gr')
db.session.add(spartano)
db.session.commit()

Actualiza

spartano = User.query.filter_by(id=1).first()
spartano.nombre = 'Leonidas'
db.session.add(spartano)
db.session.commit()

Borra

spartano = User.query.filter_by(id=1).first()
db.session.delete(spartano)
db.session.commit()

Imprime todo los datos

print(User.query.all().email)

Crear una relación

my_categoria = Category(name='Python')
my_post = Post(titulo='Hola Python!', texto='Python es increible', categoria=my_categoria)
db.session.add(my_post)
db.session.commit()

Otra posibilidad

my_categoria = Category(name='Python')
my_post = Post(titulo='Hola Python!', texto='Python es increible')
my_categoria.posts.append(my_post)
db.session.add(my_categoria)
db.session.commit()

Consulta de relacion no lazy (cada instancia trae a sus relaciones)

from sqlalchemy.orm import joinedload
todas_categorias = Category.query.options(joinedload('posts'))
for categoria in todas_categorias:
	print category, category.posts

Nos devolvería

<Category u'Python'> [<Post u'Hello Python!'>, <Post u'Snakes'>]
Versión escritorio