SlideShare a Scribd company logo
EXTENDIENDO DJANGO PARA QUE
SE CONECTE A OTRAS BASES DE
DATOS
ESCRIBE TU PROPIO BACKEND
Un caso práctico con EXAsol
@javierabadia
Alicante
PyConEs 2019
Javier Abadía
StyleSage
Índice
1. Contexto
2. El ORM de Django
3. Bases de datos Analíticas vsTransaccionales
4. Estructura de un Backend de BBDD
5. Trucos y consejos
StyleSage
BBDD
BBDD
AnalíticaBBDDdata pipeline BBDD
Analítica
ETL
StyleSage
BBDD
Analítica
BBDD
Analítica
TL
Django
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Introduction
EL ORM DE
¿Amor / Odio?
¡HAMOR!
Django ORM
◦definirmodelos
◦ independientemente de su
representación en la base de
datos
◦generar el esquema de BBDD
◦ que corresponde a dichos
modelos
◦acceder a la BBDD a través de
los modelos
◦ para leer
◦ para escribir
◦¡¡migraciones !!
Django ORM - modelos y esquemas
ÚNICA FUENTE DEVERDAD
Django ORM - consultas
Django ORM - BBDD soportadas
unofficial
3rd party
Django ORM para BBDD externas
¿Cómo funciona el ORM?
◦ Model
◦ Manager
◦ QuerySet
◦ Query
◦ Database Backend
◦ SQLCompiler
¿Cómo funciona el ORM?
◦ Model
◦ Manager
◦ QuerySet
◦ Query
◦ Database
Backend
◦ SQLCompiler
¿Cómo funciona el ORM?
◦ Model
◦ Manager
◦ QuerySet
◦ Query
◦ Database
Backend
◦ SQLCompiler
¿Cómo funciona el ORM?
◦ Model
◦ Manager
◦ QuerySet
◦ Query
◦ Database
Backend
◦ SQLCompiler
¿Cómo funciona el ORM?
◦ Model
◦ Manager
◦ QuerySet
◦ Query
◦ Database
Backend
◦ SQLCompiler
BASES DE DATOS
Transaccionales y Analíticas
Bases de Datos Transaccionales: PostgreSQL
product_id country brand description current_price
100 us Nike Air Max 2000 124,95
101 us Adidas Originals Forest Hills 65,00
102 uk Adidas Gazelle 95,00
103 uk Nike Color Burst 150,00
• Los datos se almacenan en disco por filas
• Para leer un campo, se lee la fila completa
(un bloque de 4Kb)
• Índices
• RAPIDÍSIMO
Bases de Datos Transaccionales: PostgreSQL
product_id country brand description current_price
100 us Nike Air Max 2000 124,95
101 us Adidas Originals Forest Hills 65,00
102 uk Adidas Gazelle 95,00
103 uk Nike Color Burst 150,00
• INSERT
• UPDATE =
implementado como
un DELETE + INSERT
• RAPIDÍSIMO
1. Leer TODAS las filas 2. seleccionar
current_price
3. calcular
MIN, AVG, MAX
Bases de Datos Transaccionales: PostgreSQL
product_id country brand description current_price
100 us Nike Air Max 2000 124,95
101 us Adidas Originals Forest Hills 65,00
102 uk Adidas Gazelle 95,00
103 uk Nike Color Burst 150,00
• LENTÍIIIISIMO
• 400M de prod * 10Kb / prod = 3.6Tb
• Leer 4TB a 500Mb/s = +2 horas
Bases de Datos Analíticas:
Redshift, SAP HANA, EXAsol
product_id
100
101
102
103
country
us
us
uk
uk
brand
Nike
Adidas
Adidas
Nike
description
Air Max 2000
Originals Forest Hills
Gazelle
Color Burst
current_price
124,95
65,00
95,00
150,00
• Los datos se almacenan en disco por
COLUMNAS
• Con compresión
• Operaciones en Memoria RAM
• Sharding / Paralelización
💶
Bases de Datos Analíticas:
Redshift, SAP HANA, EXAsol…
product_id
100
101
102
103
country
us
us
uk
uk
brand
Nike
Adidas
Adidas
Nike
description
Air Max 2000
Originals Forest Hills
Gazelle
Color Burst
current_price
124,95
65,00
95,00
150,00
Django ORM - BBDD soportadas
unofficial
3rd party
?
DIY DB BACKEND
por Juan Palomo
🤮
Django
Las piezas necesarias
Django Backend
django-pyodbc
Django Backend
JDBC Driver ODBC Driver
ODBC
unixODBC
pyODBC
red, paquetes TCP/IP
Native Driver
PEP-249
≈PEP-249
🤮 🤮
Django DB Backends
◦ Python PEP 249
◦ estándar de la API que debe ofrecer una BBDD en Python
◦ connection / cursor
◦ DB Backend = Capa de Adaptación
◦ cadenas de conexión
◦ tipos de datos soportados
◦ funciones especificas
◦ fechas y horas
◦ quoting
◦ LIMIT / OFFSET
◦ distintas capacidades entre BBDD
◦ diferencias de dialecto SQL
La estructura de un Backend
◦ podéis examinar dentro de
django
db
backends
base
dummy
mysql
oracle
postgresql
sqlite3
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
clase principal
referencias al resto de clases
abriry cerrar conexiones
crear cursores
🙋🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
ejecutar las queries
devolver los resultados
“envuelve” un cursor PEP-249
🙋🏼♀️
🙋🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
catálogo de
funcionalidad
soportada por la
BBDD
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
operacionesauxiliares
quote_name()
datetime_extract_sql()
…
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
💁🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
funcionespara modificar el esquema
crear/borrar tablas
crear/modificar/borrar columnas
crear/modificar/borrar índices
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
💁🏼♀️
🙅🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
💁🏼♀️
🙅🏼♀️
🙅🏼♀️
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
crear y destruir bases
de datos
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
💁🏼♀️
🙅🏼♀️
🙅🏼♀️
🙅🏼♀️
para ejecución de
tests
DatabaseWrapper
CursorWrapper
DatabaseFeatures
DatabaseOperations
DatabaseSchemaEditor
DatabaseIntrospection
DatabaseCreation
DatabaseClient
Piezas de un Backend
🙅🏼♀️
🙋🏼♀️
🙋🏼♀️
💁🏼♀️
💁🏼♀️
🙅🏼♀️
🙅🏼♀️
🙅🏼♀️
Clase Necesario Propósito
DatabaseWrapper Si abrir/cerrar conexiones
CursorWrapper Si ejecutar queries / devolver
resultados
DatabaseFeatures Si
(por defecto)
soporta/no soporta
funcionalidad
DatabaseOperations Si
(incremental)
detalles de
DatabaseSchemaEditor No para migraciones
DatabaseIntrospection No para inspectdb
DatabaseCreation No para unit testing
DatabaseClient No para shell
LECCIONES
APRENDIDAS
Documentación, Tests, Prueba & Error
◦ No está documentado cómo escribir un ‘backend’
◦ Hay información dispersa (no mucha)
◦ Hay que observar los backends que vienen con Django e
implementar lo necesario
◦ Crear una batería de tests
◦ Comprobar que el SQL es el esperado
¿Cómo ver las queries?
◦ Django DebugToolbar
◦ logging
◦ middleware
◦ cursor wrapper
◦ https://docs.djangoproject.com/en/2.2/topics/db/instrumentation/
◦ instrumentar nuestro
propio cursor
Consideraciones Prácticas
◦ paquete
instalable en
modo edición
Conclusiones
◦ se puede
◦ merece la pena
◦ ármate de paciencia
◦ pruebas
@javierabadia
Alicante
PyConEs 2019
Javier Abadía
StyleSage
Referencias
◦ https://es.slideshare.net/HctorPablosLpez/exprimiendo-el-orm-de-django
◦ https://reinout.vanrees.org/weblog/2016/11/04/database-backends.html
◦ https://www.djangounderthehood.com/talks/ (Michael Manfre - Custom
Database Backends)
◦ https://www.youtube.com/watch?v=tkwZ1jG3XgA (James Benett - Django in
Depth, PyCon 2015)
◦ https://github.com/mkleehammer/pyodbc
◦ https://github.com/mkleehammer/pyodbc/wiki
◦ https://github.com/lionheart/django-pyodbc
◦ https://github.com/opbeat/django-postgres-readonly

More Related Content

What's hot

Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
Richard Eliseo Mendoza Gafaro
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
Carlos Anibal Riascos Hurtado
 
Java y Bases de Datos
Java y Bases de DatosJava y Bases de Datos
Java y Bases de Datos
Ronny Parra
 
Rpta Modelo Facturacion Script
Rpta Modelo Facturacion ScriptRpta Modelo Facturacion Script
Rpta Modelo Facturacion Script
guest9f8c58
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
Daniiel Toorres
 
Diccionario de base de datos Prueba
Diccionario de base de datos PruebaDiccionario de base de datos Prueba
Diccionario de base de datos Prueba
Juan Guerrero
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeans
Emerson Garay
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
Carlos Hernando
 
Domótica. Test de conocimientos
Domótica. Test de conocimientosDomótica. Test de conocimientos
Domótica. Test de conocimientosJesús Amieiro
 
Base de datos modelo entidad relacion
Base de datos modelo entidad relacionBase de datos modelo entidad relacion
Base de datos modelo entidad relacion
Fco Javier Rodriguez
 
Integridad en las bases de datos
Integridad en las bases de datosIntegridad en las bases de datos
Integridad en las bases de datos
Guadalupe Robles Calderón
 
Code block
Code blockCode block
Code block
ArmandoC42
 
Estándar TIA 942
Estándar TIA 942Estándar TIA 942
Estándar TIA 942
Patricio Espinoza
 
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jspExplicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Boris Salleg
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
Darwin Durand
 
Seguridad sql server
Seguridad sql serverSeguridad sql server
Seguridad sql server
Jorge Luis Becerra Urquiza
 
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A REDCONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
FERNANDO SOLIZ
 
13 Curso de POO en java - métodos propios de clase
13 Curso de POO en java - métodos propios de clase13 Curso de POO en java - métodos propios de clase
13 Curso de POO en java - métodos propios de clase
Clara Patricia Avella Ibañez
 
Poo manual de ejercicios
Poo manual de ejercicios Poo manual de ejercicios
Poo manual de ejercicios
Pilar Quiroz Zavaleta
 

What's hot (20)

Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Java y Bases de Datos
Java y Bases de DatosJava y Bases de Datos
Java y Bases de Datos
 
Rpta Modelo Facturacion Script
Rpta Modelo Facturacion ScriptRpta Modelo Facturacion Script
Rpta Modelo Facturacion Script
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
 
Diccionario de base de datos Prueba
Diccionario de base de datos PruebaDiccionario de base de datos Prueba
Diccionario de base de datos Prueba
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Ejemplo de Trigger en Mysql
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeans
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
Domótica. Test de conocimientos
Domótica. Test de conocimientosDomótica. Test de conocimientos
Domótica. Test de conocimientos
 
Base de datos modelo entidad relacion
Base de datos modelo entidad relacionBase de datos modelo entidad relacion
Base de datos modelo entidad relacion
 
Integridad en las bases de datos
Integridad en las bases de datosIntegridad en las bases de datos
Integridad en las bases de datos
 
Code block
Code blockCode block
Code block
 
Estándar TIA 942
Estándar TIA 942Estándar TIA 942
Estándar TIA 942
 
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jspExplicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
 
Seguridad sql server
Seguridad sql serverSeguridad sql server
Seguridad sql server
 
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A REDCONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
CONFIGURACION DE FIREWALL DE WINDOWSY PROTECCION DE ACCESO A RED
 
13 Curso de POO en java - métodos propios de clase
13 Curso de POO en java - métodos propios de clase13 Curso de POO en java - métodos propios de clase
13 Curso de POO en java - métodos propios de clase
 
Poo manual de ejercicios
Poo manual de ejercicios Poo manual de ejercicios
Poo manual de ejercicios
 

Similar to Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol

DB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacionalDB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacional
Franklin Parrales Bravo
 
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
SpanishPASSVC
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
Microsoft Argentina y Uruguay [Official Space]
 
Codeigniter101
Codeigniter101Codeigniter101
Codeigniter101
Emiliano Hernandez
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
Andrés Hevia
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
Asier Marqués
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
Julián Castiblanco
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
Cesar Martinez
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
devsco63
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
Robert Wolf
 
Meetup Spark 2.0
Meetup Spark 2.0Meetup Spark 2.0
Conociendo los cambios de SQL Server a partir de 2012 a 2016
Conociendo los cambios de SQL Server a partir de 2012 a 2016Conociendo los cambios de SQL Server a partir de 2012 a 2016
Conociendo los cambios de SQL Server a partir de 2012 a 2016
Joseph Lopez
 
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Julián Castiblanco
 
Presentación: Administración y programación de bases de datos relacionales.
Presentación: Administración y programación de bases de datos relacionales.Presentación: Administración y programación de bases de datos relacionales.
Presentación: Administración y programación de bases de datos relacionales.
Angel Ladrero Gracia
 
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
GeneXus
 
Explorando los Sabores de Azure DW
Explorando los Sabores de Azure DWExplorando los Sabores de Azure DW
Explorando los Sabores de Azure DW
Raul Martin Sarachaga Diaz
 
Jdbc
JdbcJdbc
cuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docxcuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docx
Igor Rodriguez
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
Américo Uriarte Quispe
 
Base de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL ServerBase de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL Server
SuarezJhon
 

Similar to Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol (20)

DB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacionalDB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacional
 
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 
Codeigniter101
Codeigniter101Codeigniter101
Codeigniter101
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatos
 
Meetup Spark 2.0
Meetup Spark 2.0Meetup Spark 2.0
Meetup Spark 2.0
 
Conociendo los cambios de SQL Server a partir de 2012 a 2016
Conociendo los cambios de SQL Server a partir de 2012 a 2016Conociendo los cambios de SQL Server a partir de 2012 a 2016
Conociendo los cambios de SQL Server a partir de 2012 a 2016
 
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
 
Presentación: Administración y programación de bases de datos relacionales.
Presentación: Administración y programación de bases de datos relacionales.Presentación: Administración y programación de bases de datos relacionales.
Presentación: Administración y programación de bases de datos relacionales.
 
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
140 D Bcripto Protegiendo Datos En Aplicaciones Genexus Web
 
Explorando los Sabores de Azure DW
Explorando los Sabores de Azure DWExplorando los Sabores de Azure DW
Explorando los Sabores de Azure DW
 
Jdbc
JdbcJdbc
Jdbc
 
cuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docxcuadro_comparativo_SGBD_top_10.docx (1).docx
cuadro_comparativo_SGBD_top_10.docx (1).docx
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
 
Base de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL ServerBase de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL Server
 

More from Javier Abadía

Python Asíncrono - Async Python
Python Asíncrono - Async PythonPython Asíncrono - Async Python
Python Asíncrono - Async Python
Javier Abadía
 
UX/UI para Desarrolladores
UX/UI para DesarrolladoresUX/UI para Desarrolladores
UX/UI para Desarrolladores
Javier Abadía
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
Javier Abadía
 
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Javier Abadía
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en Python
Javier Abadía
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar Django
Javier Abadía
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMR
Javier Abadía
 
Anatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados ElectoralesAnatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados Electorales
Javier Abadía
 
Deep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la modaDeep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la moda
Javier Abadía
 
Análisis de colores: cómo analizar tendencias de moda automáticamente
 Análisis de colores: cómo analizar tendencias de moda automáticamente Análisis de colores: cómo analizar tendencias de moda automáticamente
Análisis de colores: cómo analizar tendencias de moda automáticamente
Javier Abadía
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
Javier Abadía
 
La Noche Electoral
La Noche ElectoralLa Noche Electoral
La Noche Electoral
Javier Abadía
 

More from Javier Abadía (12)

Python Asíncrono - Async Python
Python Asíncrono - Async PythonPython Asíncrono - Async Python
Python Asíncrono - Async Python
 
UX/UI para Desarrolladores
UX/UI para DesarrolladoresUX/UI para Desarrolladores
UX/UI para Desarrolladores
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDOLas reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
Las reglas que hay que romper para que tu equipo de desarrollo sea el más RÁPIDO
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en Python
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar Django
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMR
 
Anatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados ElectoralesAnatomía de un Bot para Resultados Electorales
Anatomía de un Bot para Resultados Electorales
 
Deep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la modaDeep learning image classification aplicado al mundo de la moda
Deep learning image classification aplicado al mundo de la moda
 
Análisis de colores: cómo analizar tendencias de moda automáticamente
 Análisis de colores: cómo analizar tendencias de moda automáticamente Análisis de colores: cómo analizar tendencias de moda automáticamente
Análisis de colores: cómo analizar tendencias de moda automáticamente
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 
La Noche Electoral
La Noche ElectoralLa Noche Electoral
La Noche Electoral
 

Recently uploaded

Aplicación de las sentencias de control en telecomunicaciones
Aplicación de las sentencias de control en telecomunicacionesAplicación de las sentencias de control en telecomunicaciones
Aplicación de las sentencias de control en telecomunicaciones
ambuludimateo2
 
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
Javier Martinez Seco
 
DuckDuckGo (Motor de Busqueda) - JRM - APSTI I A
DuckDuckGo (Motor de Busqueda) -  JRM - APSTI I ADuckDuckGo (Motor de Busqueda) -  JRM - APSTI I A
DuckDuckGo (Motor de Busqueda) - JRM - APSTI I A
DarnotOcxalFlorianoP
 
APLICACIONES EN INTERNET-GOOGLE.20240pdf
APLICACIONES EN INTERNET-GOOGLE.20240pdfAPLICACIONES EN INTERNET-GOOGLE.20240pdf
APLICACIONES EN INTERNET-GOOGLE.20240pdf
jordanovillacorta09
 
PLUGIN (Mary Cielo Huañec Paz) .pdf
PLUGIN (Mary Cielo Huañec Paz)      .pdfPLUGIN (Mary Cielo Huañec Paz)      .pdf
PLUGIN (Mary Cielo Huañec Paz) .pdf
MaryCieloHuaecPaz
 
Trabajo programacion primer semestre Telecomunicaciones
Trabajo programacion primer semestre TelecomunicacionesTrabajo programacion primer semestre Telecomunicaciones
Trabajo programacion primer semestre Telecomunicaciones
paulbosq
 
software para ver la descripcion de nuestra computadora
software para ver la descripcion de nuestra computadorasoftware para ver la descripcion de nuestra computadora
software para ver la descripcion de nuestra computadora
ChristiamGiraldoAsce
 
IF y SWITCH: Claves para una Lógica de Programación
IF y SWITCH: Claves para una Lógica de ProgramaciónIF y SWITCH: Claves para una Lógica de Programación
IF y SWITCH: Claves para una Lógica de Programación
bvaldivieso014
 

Recently uploaded (8)

Aplicación de las sentencias de control en telecomunicaciones
Aplicación de las sentencias de control en telecomunicacionesAplicación de las sentencias de control en telecomunicaciones
Aplicación de las sentencias de control en telecomunicaciones
 
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...
 
DuckDuckGo (Motor de Busqueda) - JRM - APSTI I A
DuckDuckGo (Motor de Busqueda) -  JRM - APSTI I ADuckDuckGo (Motor de Busqueda) -  JRM - APSTI I A
DuckDuckGo (Motor de Busqueda) - JRM - APSTI I A
 
APLICACIONES EN INTERNET-GOOGLE.20240pdf
APLICACIONES EN INTERNET-GOOGLE.20240pdfAPLICACIONES EN INTERNET-GOOGLE.20240pdf
APLICACIONES EN INTERNET-GOOGLE.20240pdf
 
PLUGIN (Mary Cielo Huañec Paz) .pdf
PLUGIN (Mary Cielo Huañec Paz)      .pdfPLUGIN (Mary Cielo Huañec Paz)      .pdf
PLUGIN (Mary Cielo Huañec Paz) .pdf
 
Trabajo programacion primer semestre Telecomunicaciones
Trabajo programacion primer semestre TelecomunicacionesTrabajo programacion primer semestre Telecomunicaciones
Trabajo programacion primer semestre Telecomunicaciones
 
software para ver la descripcion de nuestra computadora
software para ver la descripcion de nuestra computadorasoftware para ver la descripcion de nuestra computadora
software para ver la descripcion de nuestra computadora
 
IF y SWITCH: Claves para una Lógica de Programación
IF y SWITCH: Claves para una Lógica de ProgramaciónIF y SWITCH: Claves para una Lógica de Programación
IF y SWITCH: Claves para una Lógica de Programación
 

Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol

Editor's Notes

  1. 35 minutos de duración + 5 minutos de preguntas Título: Extendiendo Django para que se conecte a otras Bases de Datos: escribe tu propio backend Tipo de contribución: (b) Charla corta Charla extendida Póster Taller Idioma: (a) Español Inglés Nivel: (a) Avanzado Medio Iniciación Palabras clave: Django, backend, Base de Datos, SQL Resumen: Django permite acceder – mediante su ORM – a distintas bases de datos. De serie, Django soporta PostgreSQL, MySQL, SQLite, Oracle y existen “backends” (es decir drivers) no oficiales para IBM DB2, Microsoft SQL Server , Firebird y bases de datos ODBC. Pero… ¿qué pasa si nuestros datos están en una base de datos para la que no existe – todavía – un backend? ¿cómo de fácil o difícil es escribir nuestro propio backend para esa base de datos? En esta charla compartiremos nuestra experiencia escribiendo un backend para una base de datos analítica (EXASol DB): ¿cómo lo hemos hecho? ¿qué documentación o referencias hay disponibles? ¿cómo nos aseguramos de que el acceso a los datos es correcto? Presentación: Estructura de la presentación (orientativa): Introducción Bases de datos soportadas, variantes de SQL La estructura de un backend de BBDD de Django Aspectos relevantes a considerar Pruebas Unitarias Conclusiones Pre-requisitos para atender a la propuesta: El tema es avanzado y muy específico. Es necesario estar familiarizado con el ORM de Django y SQL. Otros requerimientos técnicos: Ninguno en especial: me gustaría usar mi propio ordenador. Referencias: Documentación de Django: https://www.djangoproject.com/
  2. diagrama del pipeline
  3. diagrama del pipeline
  4. Django sirve para hacer páginas web Tiene varias partes: responder requests sistema de templates ORM …
  5. definir modelos independientemente de su representación en la base de datos generar el esquema de BBDD que corresponde a dichos modelos acceder a la BBDD a través de los modelos para leer para escribir migraciones !!
  6. modelo UML tabla SQL modelo en Python https://djangobook.com/mdj2-models/ definición de los modelos tipo de dato de cada atributo restricciones (únique, not null) valores por defecto relaciones entre modelos índices
  7. 2. acceso a los datos consultas simples consultas con joins consultas con agregaciones live coding demo? Python REPL
  8. PostgreSQL MySQL SQLite Oracle unofficial third party drivers
  9. Podemos acceder a BBDD que no son “propiedad” de nuestra aplicación Generar unos “modelos” a partir de las tablas/vistas de la BBDD managed = false
  10. BBDD analítica
  11. BBDD analítica
  12. muchos datos a pocos datos
  13. BBDD analítica
  14. BBDD analítica
  15. BBDD analítica
  16. PostgreSQL MySQL SQLite Oracle unofficial third party drivers
  17. https://www.python.org/dev/peps/pep-0249/
  18. ilustrar con ejemplos
  19. partes que hace cada parte? hay que implementar todo? por suerte, no
  20. catálogo de funcionalidad soportada por la BBDD Django puede auto-detectar algunas ‘features’ si sabemos si la bbdd soporta o no soporta la feature, es mejor especificarlo para evitar la autodetección ej. supports_transactions = True suelen controlar “edge cases” o funcionalidad específica inicialmente, ignorarlo
  21. necesarias para ejecutar queries implementación por defecto para muchas de ellas implementar según vayan haciendo falta
  22. funciones para modificar el esquema crear/borrar tablas crear/modificar/borrar columnas crear/modificar/borrar índices necesarias para ejecutar las migraciones python manage.py migrate
  23. para abrir una “shell” de base de datos python manage.py dbshell no es necesario implementarlo
  24. https://docs.djangoproject.com/en/2.2/topics/db/instrumentation/