Introduccion a Prisma ORM - Operaciones de Base de Datos con Tipado Seguro

Intermedio | 55 min de lectura | 2024.12.22

Lo que Aprenderas en Este Tutorial

✓ Configuracion de Prisma
✓ Definicion de esquemas
✓ Migraciones
✓ Operaciones CRUD
✓ Relaciones
✓ Transacciones

Paso 1: Configuracion

npm init -y
npm install prisma @prisma/client
npm install -D typescript ts-node @types/node
npx prisma init

Paso 2: Definicion de Esquema

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
  createdAt DateTime @default(now())
}

Paso 3: Migracion

# Crear y ejecutar migracion
npx prisma migrate dev --name init

# Generar Prisma Client
npx prisma generate

# Verificar base de datos
npx prisma studio

Paso 4: Operaciones CRUD

// src/index.ts
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  // Create
  const user = await prisma.user.create({
    data: {
      email: 'alice@example.com',
      name: 'Alice',
      posts: {
        create: { title: 'Mi primera publicacion' }
      }
    },
    include: { posts: true }
  });

  // Read
  const users = await prisma.user.findMany({
    include: { posts: true }
  });

  // Update
  const updated = await prisma.user.update({
    where: { id: 1 },
    data: { name: 'Alice Updated' }
  });

  // Delete
  await prisma.post.delete({
    where: { id: 1 }
  });
}

main()
  .catch(console.error)
  .finally(() => prisma.$disconnect());

Paso 5: Consultas Avanzadas

// Filtrado
const posts = await prisma.post.findMany({
  where: {
    OR: [
      { title: { contains: 'Prisma' } },
      { content: { contains: 'database' } }
    ],
    published: true
  },
  orderBy: { createdAt: 'desc' },
  take: 10,
  skip: 0
});

// Transaccion
const [user, post] = await prisma.$transaction([
  prisma.user.create({ data: { email: 'bob@example.com' } }),
  prisma.post.create({ data: { title: 'New Post', authorId: 1 } })
]);

Resumen

Prisma es un ORM con tipado seguro que proporciona una experiencia de desarrollo consistente desde la definicion de esquemas hasta las consultas.

← Volver a la lista