3. Pycones 2015
• Introducción a ORM
• ORM en Python
• SqlAlchemy/SQLObject/PonyORM/Peewee/Django-ORM
• Comparativa
• Seguridad
Agenda
4. Pycones 2015
Introducción a ORM
• Object Relational Mapping
• Mapear objetos en tablas
• Crea una BD orientada a objetos virtual
• Es necesario saber cómo funcionan
las base de datos a nivel relacional
6. Pycones 2015
Ventajas
• Evitar escribir código SQL
• Independizar la fuente de datos
• Mismo código puedo cambiar
base de datos
• Fácil modelado de datos
29. Pycones 2015
PonyORM
• Funciona de forma similar a
SQLalchemy,mejorando algunas cosas
• Puede trabajar a la vez con varias BD
• Relaciones bidireccionales
https://ponyorm.com
30. Pycones 2015
PonyORM
db_session
• Realiza un commit si detecta cualquier cambio
y no se ha producido ninguna excepción
• Realiza un rollback de la transacción si se
produce una excepción
• Gestiona el pool de conexiones con la BD
• Gestiona caché de sesión de forma automática
34. Pycones 2015
PonyORM ventajas
• Optimización automática de consultas(Automatic
query optimization)
• Gestión automática de transacciones
• Almacenamiento en caché automático de consultas
y objetos
• Soporte completo de claves primarias compuestas
• La capacidad de escribir con facilidad consultas
utilizando LEFT JOIN, VISTA y otras características
de SQL
40. Pycones 2015
Transacciones
try:
with db.atomic() as nested_txn:
object = Entity.create()
return 'Success'
except peewee.IntegrityError:
# This will roll back the above create() query.
nested_txn.rollback()
return 'Failure'
42. Pycones 2015
Performance
# Faster
with db.atomic():
for data_dict in data_source:
Model.create(**data_dict)
# Fastest
with db.atomic():
Model.insert_many(data_source).execute()
43. Pycones 2015
Cache
• Minimizar número de llamadas a BD
• Optimizar consultas
• Identity Map
object = Entity[primary_key]
obj = Entity.objects.get(pk=the_id)]
44. Pycones 2015
Get Data from Caché
object = Entity.get(Entity.pk == 'value')
object = session.query(Entity).get(pk='value')
51. Pycones 2015
Comparativa
SQLAlchemy SQLObject PonyORM Peewee Django ORM
Soporte sesión
en Base de
datos
Automatic
Schema
Migrations
Many-to-many
relations intuitive
Automatic query
optimization
Unit of Work