Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Comparing ORM

jmortegac
November 22, 2015

Python Comparing ORM

Python Comparing ORM
SQLalchemy,SQLObject,PonyORM,Peewee,Django ORM

jmortegac

November 22, 2015
Tweet

More Decks by jmortegac

Other Decks in Programming

Transcript

  1. Pycones 2015 • Introducción a ORM • ORM en Python

    • SqlAlchemy/SQLObject/PonyORM/Peewee/Django-ORM • Comparativa • Seguridad Agenda
  2. 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
  3. 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
  4. Pycones 2015 Patrones ORM • Identity Map • Caché de

    objetos Objetos en BD Objetos en memoria
  5. Pycones 2015 Introducción a ORM • Patrones: • Active Record

    Pattern • Relacion 1:1 Object Table /row
  6. Pycones 2015 ORM en python SELECT * FROM USERS WHERE

    zip_code=94107; users = Users.objects.filter(zip_code=94107)
  7. Pycones 2015 SQLalchemy • Es de los más avanzados •

    Más flexible para el programador • Patrón unit of Work
  8. Pycones 2015 SQLObject http://sqlobject.org • No es necesario commit •

    Soporta joins • Relaciones uno-muchos, muchos-muchos
  9. 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")
  10. 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
  11. 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
  12. 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
  13. Pycones 2015 Primary key • All create it automatically except

    SQLAlchemy id = Column(Integer, primary_key=True)
  14. 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'
  15. 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()
  16. 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()
  17. 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)]
  18. Pycones 2015 Get Data from Caché object = Entity.get(Entity.pk ==

    'value') object = session.query(Entity).get(pk='value')
  19. 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
  20. 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
  21. 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))