SlideShare una empresa de Scribd logo
Pycones 2015
Python
Comparing ORM
José manuel ortega |@jmortegac
Pycones 2015
https://speakerdeck.com/jmortega
https://medium.com/@jmortegac
Pycones 2015
• Introducción a ORM
• ORM en Python
• SqlAlchemy/SQLObject/PonyORM/Peewee/Django-ORM
• Comparativa
• Seguridad
Agenda
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
Pycones 2015
Introducción a ORM
• Mapeo:
• ClaseTabla
• AtributoColumna
• ObjetoFila
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
Pycones 2015
Patrones ORM
• Unit of Work
Pycones 2015
Patrones ORM
• Identity Map
• Caché de objetos
Objetos en
BD
Objetos en
memoria
Pycones 2015
Introducción a ORM
• Patrones:
• Active Record Pattern
• Relacion 1:1
Object Table /row
Pycones 2015
Introducción a ORM
• Patrones:
• Data Mapper Pattern
Object DataMaper Database
Pycones 2015
ORM en python
SELECT * FROM USERS WHERE zip_code=94107;
users = Users.objects.filter(zip_code=94107)
Pycones 2015
Soporte Bases datos
Pycones 2015
Soporte web FrameWorks
Pycones 2015
Modelo de datos
Pycones 2015
SQLiteBrowser
Pycones 2015
SQLiteBrowser
Pycones 2015
Muchos a muchos
Pycones 2015
SQLalchemy
• Es de los más avanzados
• Más flexible para el programador
• Patrón unit of Work
Pycones 2015
SQLalchemy
• Objeto session para persistir los objetos
• session.commit()
Pycones 2015
SQLalchemy Many to many
Pycones 2015
SQLalchemy
Query objects
Pycones 2015
SQLObject
http://sqlobject.org
• No es necesario commit
• Soporta joins
• Relaciones uno-muchos,
muchos-muchos
Pycones 2015
SQLObject
event = Event(type="workshop",
description="Usando contenedores para Big Data",
date=date1,
track = track4);
event.addSpeaker(speaker1);
class Event(SQLObject):
type = StringCol(length=255) #workshop /talk
description = StringCol(length=255)
date = DateCol(default=None)
track = ForeignKey('Track')
speakers = RelatedJoin('Speaker',
intermediateTable="speaker_event",
joinColumn="eventID",
otherColumn="speakerID")
Pycones 2015
SQLObject
<Nombre_clase>.connection.debug=True
Pycones 2015
SQLObject Many to Many
Pycones 2015
Expresiones SQL
SQLObject
event = Event.select(Event.q.description==description)
Pycones 2015
SQLBuilder
from sqlobject.sqlbuilder import *
Pycones 2015
Generación dinámica
A partir de un xml o esquema
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
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
Pycones 2015
PonyORM
db_session decorator
Pycones 2015
PonyORM
Lambda function
Pycones 2015
PonyORM
Many to Many
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
Pycones 2015
Django ORM
Pycones 2015
Peewee
https://github.com/coleifer/peewee
• Definición de modelos similar a
Django
• Patrón ActiveRecord
Pycones 2015
Soporte python 3
SQLObject
Pycones 2015
Primary key
• All create it automatically except
SQLAlchemy
id = Column(Integer, primary_key=True)
Pycones 2015
Autocommit=true
db_session
SQLObject
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'
Pycones 2015
Transacciones
@db.atomic()
def create_entity():
# This statement will run in a transaction. If the
caller is already
# running in an `atomic` block, then a savepoint
will be used instead.
return Entity.create()
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()
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)]
Pycones 2015
Get Data from Caché
object = Entity.get(Entity.pk == 'value')
object = session.query(Entity).get(pk='value')
Pycones 2015
Generating tables
• PeeWee
db.create_tables([Entity1,Entity2,...,Entityn],True)
try:
<Entity>.create_table()
except peewee.OperationalError:
print “Table already exists!”
Pycones 2015
Generating tables
SQLObject
Base.metadata.create_all(engine)
for each Entity:
Entity.createTable(ifNotExists=True)
Pycones 2015
Generating tables
db = Database("sqlite", "ponyORM_pycon.sqlite",
create_db=True)
class Entity(db.Entity):
db.generate_mapping(create_tables=True)
Pycones 2015
Herencia
• Todas soportan herencia para crear las
entidades
Pycones 2015
Herencia
Pycones 2015
Herencia
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
Pycones 2015
Soporte BD
ORM BD
SQLAlchemy MySQL, Postgres, SQLite, Oracle,
MSSQLServer,Sybase,FireBird
SQLObject MySQL, Postgres, SQLite, Sybase, Maxdb,
MSSQLServer
PonyORM MySQL, Postgres, SQLite, Oracle
Peewee MySQL, Postgres, SQLite
Django ORM MySQL, Postgres, SQLite,Oracle
Pycones 2015
Seguridad
query = MyModel.select().where(SQL('Some SQL
expression %s' % user_data))
query = MyModel.select().where(SQL('Some SQL
expression %s' , user_data))
Pycones 2015
Django security
• Binding parameters
Pycones 2015
GitHub examples
https://github.com/jmortega/pycon-comparing_ORM
Pycones 2015
Testing examples
http://code.runnable.com/Vk8C1Vkf2dAQGrrc/python-comparing-
orm-for-sqlobject-sqlalchemy-ponyorm-and-peewee
http://bit.ly/1O9gDn5
Pycones 2015
Thank you!
?

Más contenido relacionado

PPTX
Django - sql alchemy - jquery
PDF
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
ODP
Why not ORM
PPTX
Programación 3: Grafos, representación y operaciones
PPT
Conferencia, Consciencia identitaria del valencià front al catala
PDF
Virtual Pathways - Keys to Building a Profitable Virtual Assistance Business
PDF
Chromatec
PDF
Casoclinicosimple clinicaintegraldelnioi-111009152728-phpapp02 (1)
Django - sql alchemy - jquery
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Why not ORM
Programación 3: Grafos, representación y operaciones
Conferencia, Consciencia identitaria del valencià front al catala
Virtual Pathways - Keys to Building a Profitable Virtual Assistance Business
Chromatec
Casoclinicosimple clinicaintegraldelnioi-111009152728-phpapp02 (1)

Destacado (15)

DOCX
The end of_business_as_usual_–_rapport (3)
DOCX
Jabón casero
DOC
Respuesta direccion mipymes sr gomez 2015
PDF
COMCO_Oldtimer_Leasing
DOCX
OFERTA TÉCNICO DE SELECCIÓN MADRID
DOCX
Ingeniero Petrolero_Carlos Saravia_CV_2016_19 años Experiencia
PPT
San jose 2011
DOCX
Propaganda médica probertan
PDF
Samcom portfolio
PPTX
Monumentos de países europeos
PDF
Canada; Rainwater Collection System: A Feasibility Study for Dalhousie Univ...
 
PPTX
Trabajo de power point Cancer de seno angiel lorena martinez (2) (2)
PPT
Up encriptacion publica v1.2
PPT
Presentacion final vida amorosa de Cleopatra
PPT
Aparato respiratorio
The end of_business_as_usual_–_rapport (3)
Jabón casero
Respuesta direccion mipymes sr gomez 2015
COMCO_Oldtimer_Leasing
OFERTA TÉCNICO DE SELECCIÓN MADRID
Ingeniero Petrolero_Carlos Saravia_CV_2016_19 años Experiencia
San jose 2011
Propaganda médica probertan
Samcom portfolio
Monumentos de países europeos
Canada; Rainwater Collection System: A Feasibility Study for Dalhousie Univ...
 
Trabajo de power point Cancer de seno angiel lorena martinez (2) (2)
Up encriptacion publica v1.2
Presentacion final vida amorosa de Cleopatra
Aparato respiratorio
Publicidad

Similar a Python Comparing ORM (20)

PDF
Introducción a Python / Django
PDF
Campus Party 2019 - Programando el testing
PDF
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
PPTX
Crear una red de Blogs no penalizados - Elblogdelseo.com
PPTX
Django - Curso Básico - Principales Conceptos
PPTX
Django - Curso Básico - Principales Conceptos
PDF
Integración de Oracle Data Integrator con Oracle GoldenGate 12c
ODP
Jornadas Odoo 2015 - Buenas prácticas en el desarrollo de Odoo
PPTX
PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...
PPTX
Java script para desarrolladores SharePoint
PPTX
Presentación_POO simplificada 'estudiantes.pptx
PPTX
Introducción a html5
PPTX
Búsqueda Empresarial en SharePoint 2013 - Iberian SharePoint Conference - Jos...
ODP
Screencast aprende python - parte 1
PPTX
Futuro de Desarrollo en SharePoint
PPTX
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
PDF
Seo para prestashop
PPTX
Introducción a Django
Introducción a Python / Django
Campus Party 2019 - Programando el testing
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Crear una red de Blogs no penalizados - Elblogdelseo.com
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales Conceptos
Integración de Oracle Data Integrator con Oracle GoldenGate 12c
Jornadas Odoo 2015 - Buenas prácticas en el desarrollo de Odoo
PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...
Java script para desarrolladores SharePoint
Presentación_POO simplificada 'estudiantes.pptx
Introducción a html5
Búsqueda Empresarial en SharePoint 2013 - Iberian SharePoint Conference - Jos...
Screencast aprende python - parte 1
Futuro de Desarrollo en SharePoint
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
Seo para prestashop
Introducción a Django
Publicidad

Más de Jose Manuel Ortega Candel (20)

PDF
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
PDF
Seguridad y auditorías en Modelos grandes del lenguaje (LLM).pdf
PDF
Beyond the hype: The reality of AI security.pdf
PDF
Seguridad de APIs en Drupal_ herramientas, mejores prácticas y estrategias pa...
PDF
Security and auditing tools in Large Language Models (LLM).pdf
PDF
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
PDF
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
PDF
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PDF
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
PDF
Evolution of security strategies in K8s environments- All day devops
PDF
Evolution of security strategies in K8s environments.pdf
PDF
Implementing Observability for Kubernetes.pdf
PDF
Computación distribuida usando Python
PDF
Seguridad en arquitecturas serverless y entornos cloud
PDF
Construyendo arquitecturas zero trust sobre entornos cloud
PDF
Tips and tricks for data science projects with Python
PDF
Sharing secret keys in Docker containers and K8s
PDF
Implementing cert-manager in K8s
PDF
Python para equipos de ciberseguridad(pycones)
PDF
Python para equipos de ciberseguridad
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
Seguridad y auditorías en Modelos grandes del lenguaje (LLM).pdf
Beyond the hype: The reality of AI security.pdf
Seguridad de APIs en Drupal_ herramientas, mejores prácticas y estrategias pa...
Security and auditing tools in Large Language Models (LLM).pdf
Herramientas de benchmarks para evaluar el rendimiento en máquinas y aplicaci...
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdf
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments.pdf
Implementing Observability for Kubernetes.pdf
Computación distribuida usando Python
Seguridad en arquitecturas serverless y entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud
Tips and tricks for data science projects with Python
Sharing secret keys in Docker containers and K8s
Implementing cert-manager in K8s
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad

Último (20)

PDF
S01_s1_Sesión 1_pptx.pdf SEMANA 1 TALLER V
PPTX
lareformaprevisional-091013175510-phpapp01.pptx
PPTX
GUERRAS INTERNACIONALES DE BOLIVIA .pptx
PPSX
Unidad II - Diseño de una solucion 2025.ppsx
PDF
NORMA_1887_LEY_27269_Modificada_por_LEY_27310.pdf
PPTX
EXPOSICIÓN 2021.pptxhgdfshdghsdgshdghsds
PDF
REPORTE DE INCIDENCIA DELICTIVA IRAPUATO 1ER SEMESTRE 2025
PDF
Proyecto Bootcamp - Entregables y Documentación.pdf
PPTX
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
PPTX
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
PDF
Principios d. Anatomía y no se que más poner jaja
PDF
Riesgos en Negociaciones_comercio exterior.pdf
PPTX
Epidemiologia de campo vrs epidemiologia social.pptx
PPTX
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
PPTX
La gestión en los servicios de salud.pptx 1.pptx
PDF
MOVIMIENTO DE TIERRA Y ASFALTO.pdf 2025A
PPTX
Diabetes Mellitus, funciones, partes y tipos
DOCX
Documento sin título.dohdjdksksksksksjjskscx
PPTX
Precio optimo de venta para un emprendimiento familiar
PDF
docsity-diapositivas-de-la-salud-mental.pdf
S01_s1_Sesión 1_pptx.pdf SEMANA 1 TALLER V
lareformaprevisional-091013175510-phpapp01.pptx
GUERRAS INTERNACIONALES DE BOLIVIA .pptx
Unidad II - Diseño de una solucion 2025.ppsx
NORMA_1887_LEY_27269_Modificada_por_LEY_27310.pdf
EXPOSICIÓN 2021.pptxhgdfshdghsdgshdghsds
REPORTE DE INCIDENCIA DELICTIVA IRAPUATO 1ER SEMESTRE 2025
Proyecto Bootcamp - Entregables y Documentación.pdf
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
Principios d. Anatomía y no se que más poner jaja
Riesgos en Negociaciones_comercio exterior.pdf
Epidemiologia de campo vrs epidemiologia social.pptx
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
La gestión en los servicios de salud.pptx 1.pptx
MOVIMIENTO DE TIERRA Y ASFALTO.pdf 2025A
Diabetes Mellitus, funciones, partes y tipos
Documento sin título.dohdjdksksksksksjjskscx
Precio optimo de venta para un emprendimiento familiar
docsity-diapositivas-de-la-salud-mental.pdf

Python Comparing ORM