Slide 1

Slide 1 text

Let's Build an ORM! Greg Back PyOhio 2019

Slide 2

Slide 2 text

$ whoami Sr Software Architect at /gtback @gtback

Slide 3

Slide 3 text

Object Relational Mapper

Slide 4

Slide 4 text

Object Relational Mapper

Slide 5

Slide 5 text

Object Relational Mapper

Slide 6

Slide 6 text

Object Relational Mapper

Slide 7

Slide 7 text

https://www.jetbrains.com/research/python-developers-survey-2018/ JetBrains Python Developers Survey 2018 Results

Slide 8

Slide 8 text

(Potential) Responsibilities of an ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations

Slide 9

Slide 9 text

Responsibilities of our ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations

Slide 10

Slide 10 text

Responsibilities of our ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations ● create database ● define tables ● define fields

Slide 11

Slide 11 text

Responsibilities of our ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations ● create database ● define tables ● define fields ● define foreign keys

Slide 12

Slide 12 text

Responsibilities of our ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations ● create database ● define tables ● define fields ● define foreign keys ● create tables ● insert data ● retrieve data

Slide 13

Slide 13 text

Responsibilities of our ORM ● create database ● define tables ● define fields ○ size/length ○ nullable ○ default values ● define foreign keys ● define indices ● define relationships ○ one-to-many ○ many-to-many ○ one-to-one ○ inverse relationships ● define stored procedures ● class inheritence ● caching ● transactions ○ commit ○ rollback ○ nested transactions ● support sqlite ● support MySQL ● support PostgreSQL ● support Oracle ● support MS SQL Server ● prevent SQL injection ● remain performant ● support multiple clients ● use multiple databases ● error handling ● logging ● create tables ● insert data ○ convert data types ○ validate data ● retrieve data ○ support joins ○ order results ○ subqueries ○ nested queries ○ lazy loading ○ eager loading ● update data ○ by ID ○ using filters ● delete data ○ by ID ○ using filters ● cascading operations ● bulk operations ● create database ● define tables ● define fields ● define foreign keys ● create tables ● insert data ● retrieve data ● support sqlite

Slide 14

Slide 14 text

Let's Do This...