SlideShare una empresa de Scribd logo
1 de 52
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

Más contenido relacionado

Similar a 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 relacionalFranklin 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
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Asier Marqués
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Julián Castiblanco
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresqlCesar Martinez
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatosdevsco63
 
Lps 18 basesdedatos
Lps 18 basesdedatosLps 18 basesdedatos
Lps 18 basesdedatosRobert Wolf
 
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 2016Joseph 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 v4Juliá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 WebGeneXus
 
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).docxIgor Rodriguez
 
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 ServerSuarezJhon
 

Similar a 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
 

Más de Javier Abadía

Python Asíncrono - Async Python
Python Asíncrono - Async PythonPython Asíncrono - Async Python
Python Asíncrono - Async PythonJavier Abadía
 
UX/UI para Desarrolladores
UX/UI para DesarrolladoresUX/UI para Desarrolladores
UX/UI para DesarrolladoresJavier Abadía
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSJavier 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ÁPIDOJavier Abadía
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en PythonJavier 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 DjangoJavier 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 HMRJavier 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 ElectoralesJavier 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 modaJavier 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áticamenteJavier 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ícilJavier Abadía
 

Más de 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
 

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

Notas del editor

  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/