Alguem pode me explicar o que é ORM?

O que é ORM? Para que serve e por que eu tenho que usar isso no banco de dados por exemplo

ORM (Object-Relational Mapping)

ORM (Mapeamento Objeto-Relacional, em português) é uma ferramenta que facilita a interação entre programação e bancos de dados usando objetos da Programação orientada a objetos, facilitando operações, reduzindo a necessidade de SQL manual e tornando o desenvolvimento mais eficiente e produtivo.

Porque usar ORM?

As ORM’s chegaram para trazer produtividade e velocidade no dia a dia do programador. Veja algumas vantagens:

  1. Abstração de Banco de Dados: ORM permite trabalhar com objetos, abstraindo complexidades do banco de dados, facilitando o desenvolvimento.
  2. Portabilidade de Código: Código ORM é mais independente do banco de dados, facilitando a migração e suporte a diferentes sistemas.
  3. Produtividade no Desenvolvimento: Reduz a necessidade de escrever consultas SQL manualmente, acelerando o desenvolvimento.
  4. Manutenção Simplificada: Modificações no esquema do banco são gerenciadas automaticamente, reduzindo o esforço de manutenção.
  5. Segurança contra Injeção de SQL: ORM ajuda a prevenir ataques de injeção SQL, garantindo consultas seguras por padrão.

Exemplo ORM x SQL Query

No exemplo abaixo criamos uma tabela Usuario com a ORM do Peewee em Python.
Veja como a ORM gera o SQL para ser executado no Banco de Dados.

Criando uma tabela

Python

from peewee import *

db = SqliteDatabase('clientes.db')

class Usuario(Model):
    nome = CharField(max_length=120)
    email = CharField(max_length=100)
    idade = IntegerField()

    class Meta:
        database = db

Query SQL gerada

CREATE TABLE "usuario" (
    "id" INTEGER NOT NULL PRIMARY KEY,
    "nome" VARCHAR(120) NOT NULL,
    "email" VARCHAR(100) NOT NULL
    "idade" INTEGER NOT NULL
);

Inserindo um registro na tabela

novo_usuario = Usuario.create(
    nome="Guilherme", 
    email="teste@teste.com", 
    idade=27
)
print("id:", novo_usuario.id)
print("nome:", novo_usuario.nome)
print("email:", novo_usuario.email)
print("idade:", novo_usuario.idade)

Query SQL gerada

INSERT INTO "usuario" ("nome", "email", "idade") 
VALUES ('Guilherme', 'teste@teste.com', 27);

Video explicativo

Caso tenha interesse em experimentar ORM, fiz um video de introdução.
Video: https://www.youtube.com/watch?v=AALOmFY9SHM